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

Removing key/value pair from Dictionary in Python

我对Python很在行。

我正在尝试删除此词典中的所有"noone:0",因此它看起来与下面的相同,但没有任何"noone:0":

1
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}}

我搜索并找到了所有我应该实现它的方法,但是找不到一个有效的方法。我试着这样做没有用:

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


我相信这会满足你的需要。

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

这里(g)实际上是一本字典,但更具体地说,它是一本值也是字典的字典。因此,当我们遍历g(for i in G中的所有键时,每个键的对应值(G[i]是一个字典。如果你尝试跑步,你可以自己看到:

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

所以你真正想做的是从G中的每一个字典中弹出,也就是说,对于每一个G[I],你想从那些"子"字典中去掉"noone",而不是最主要的。

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

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

通过在pop中使用第二个参数,您甚至不必首先检查"noone"是否是g[i]中的键,因为pop方法不会引发异常。(如果您在没有第二个参数的情况下尝试这两行程序,那么对于所有没有"任何"内容的子听写,都会出现错误)。


迭代这些值并从每个值中弹出键:

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


我会去理解字典:

1
2
3
>>> 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}}