我的数据结构如下,
data = {
'0_0': [('0_0', 0), ('0_1', 1), ('0_2', 2)],
'0_1': [('0_0', 1), ('0_1', 0), ('0_2', 1)],
'0_2': [('0_0', 2), ('0_1', 1), ('0_2', 0)],
}
如何通过给定键从列表中删除元组?例如我写了一个函数如下,
def remove_all_acs(
dictionary,
delete_ac
):
for key in dictionary:
acs = dictionary[key]
for ac in acs:
if ac[0] == delete_ac:
acs.remove(ac)
break
return dictionary
这是我的预期输出,返回结果如下,
print(remove_all_acs(data, '0_0'))
{
'0_0': [('0_1', 1), ('0_2', 2)],
'0_1': [('0_1', 0), ('0_2', 1)],
'0_2': [('0_1', 1), ('0_2', 0)]
}
它可以工作,但在大型列表上效果不佳。你有什么主意吗?预先感谢。
此外,您可以使用此代码创建大型数据集,
def generate(size, max_connections):
data = {}
keys = [f'{i}_{j}' for i in range(size) for j in range(size)]
for key in keys:
connections = random.randint(1, min(max_connections, 10))
data[key] = [
(random.choice(keys), random.randint(1, 10))
for _ in range(connections)
]
return data
data = generate(200, 10)
列表和字典理解非常快且可读,试试这个:
def get_filtered(data, bad_value):
return {
key: [
t for t in value
if not t[0] == bad_value
]
for key, value in data.items()
}
get_filtered(data, '0_0')
似乎对随机生成的数据运行得相当快。