我有一个字典,我想删除字典中每个键的值。
我想要这个输出:G = {'y': {'z'}, 'z': {'u', 'f', 'y'}, 'u': {'z'}}
G = {'y': {'z', 'y'}, 'z': {'z', 'u', 'f', 'y'}, 'u': {'u', 'z'}}
我尝试了这个,但是我知道。是错的。
for key,value in G.items():
if key == value:
del value
答案 0 :(得分:4)
您不是要修改字典,而是要修改变量value
。另外,您不想查找键和值的平等,而是要检查键是否是您设置的值in
。然后通过set.remove
将其从您的集合中删除。因此,您可以使用:
for key, value in G.items():
if key in value:
G[key].remove(key)
print(G)
{'y': {'z'}, 'z': {'u', 'y', 'f'}, 'u': {'z'}}
或者,您可以使用set.discard
,如果您的集合中不存在该值,则不会给出KeyError
。因此,if
条件可以省略。
for key, value in G.items():
G[key].discard(key)
最后,考虑下面的字典理解,它创建了一个 new 字典并将其分配给G
。这并不是本质上效率低下的:时间复杂度将与上述方法相同。此版本使用set.difference
,此处使用其语法糖-
:
G = {k: v - {k} for k, v in G.items()}
根据@JonClements的评论,可以通过dict.update
通过单行版本维护对G
的引用:
G.update({k: v - {k} for k, v in G.items()})
答案 1 :(得分:0)
删除值中的键,而不是值本身。
for key, value in G.items():
if key in value:
value.remove(key)