在Python中从字典中删除键/值对

4

我对Python还是个初学者。

我想要从这个字典中删除所有的“noone: 0”,使其看起来与下面的相同,但不包含任何“noone: 0”:

G = {'a': {'b': 10, 'c': 8, 'd': 3, 'noone': 0, 'e': 3}, 'f': {'g': 7, 'c': 5, 'h': 5, 'i': 2, 'j': 4, 'noone': 0, 'l': 2}}

我搜索并找到了所有应该实现它的方法,但是没有找到一个可行的方法。我尝试了以下方法,但都失败了:

for i in G:
    if str(G[i]) == 'noone':
        G.pop('noone', None)

可能是 从字典中删除一个元素 的重复问题。 - Harshdeep Sokhey
3个回答

5

我相信这会做你想要的事情。

for i in G:
    if 'noone' in G[i]:
        G[i].pop('noone')

你所看到的是一个字典(G),但更具体地说,它的值也是字典。因此,当我们遍历G中的所有键(for i in G)时,每个键对应的值(G[i])都是一个字典。如果你尝试运行以下代码,你就可以看到这一点:

for i in G:
    print(G[i])

所以你真正想做的是从G中的每个字典中弹出。也就是说,对于每个G[i],你想要从“子”字典中删除“noone”,而不是主要顶部的字典。

附注:如果你真的想利用Python的便利性,甚至可以简单地编写

for i in G:
    G[i].pop('noone', None)

通过使用弹出第二个参数, 您甚至不必先检查'noone'是否是G [i]中的键,因为pop方法不会引发异常。(如果您尝试在没有第二个参数的情况下执行此两行代码,则会在所有子字典中都找不到“noone”时出现错误)。

1

遍历值并从每个值中弹出键:

for v in G.values():
    _ = v.pop('noone', None)

0
我会选择使用字典推导式:
>>> G = {'a': {'b': 10, 'c': 8, 'd': 3, 'noone': 0, 'e': 3}, 'f': {'g': 7, 'c': 5, 'h': 5, 'i': 2, 'j': 4, 'noone': 0, 'l': 2}}
>>> {k1: {k2: v2 for (k2, v2) in v1.items() if k2 != 'noone'} for k1, v1 in G.items()}
{'f': {'g': 7, 'c': 5, 'j': 4, 'h': 5, 'i': 2, 'l': 2}, 'a': {'b': 10, 'e': 3, 'd': 3, 'c': 8}}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接