【问题标题】:Delete the value of a dictionary if the value is the key in python如果值是python中的键,则删除字典的值
【发布时间】:2018-11-25 20:31:29
【问题描述】:

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

【问题讨论】:

  • 您的代码没有修改实际的字典,只是一个临时变量value

标签: python dictionary for-loop set


【解决方案1】:

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

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

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

【讨论】:

  • 您的最后一个示例可以就地更新 G 并使用 set.difference 而不是重建设置值,例如:G.update((k, v.difference((k,))) for k, v in G.items())
  • @JonClements,是的,我认为{k: v - {k} for k, v in G.items()} 也可以。
  • 是的...本来打算建议-不错的...虽然,如果字典 G 引用有多个引用并且所有引用都应该反映更改,那么您将需要@987654343 @...
【解决方案2】:

删除值中的键,而不是值本身。

for key, value in G.items():
    if key in value:
        value.remove(key)

【讨论】:

    猜你喜欢
    • 2021-12-28
    • 1970-01-01
    • 2022-01-06
    • 2017-07-04
    • 1970-01-01
    • 2019-05-04
    • 2014-05-23
    • 1970-01-01
    • 2018-12-24
    相关资源
    最近更新 更多