首页 > 解决方案 > 如果值是python中的键,则删除字典的值

问题描述

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

标签: pythondictionaryfor-loopset

解决方案


您不是在修改字典,而是在修改变量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)

最后,考虑下面的字典理解,它创建一个字典并将其分配给G. 这本质上并不是低效的:时间复杂度将与上述方法相同。这个版本使用set.difference, 这里通过它的语法糖-

G = {k: v - {k} for k, v in G.items()}

G根据@JonClements 的评论,可以通过以下方式维护引用的单行版本dict.update

G.update({k: v - {k} for k, v in G.items()})

推荐阅读