如果值是python中的键,则删除字典的值

时间:2018-11-25 20:31:30

标签: python dictionary for-loop set

我有一个字典,我想删除字典中每个键的值。 我想要这个输出: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

2 个答案:

答案 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)