我是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)
答案 0 :(得分:4)
我相信这会做你想要的。
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],你想删除“没有人”。来自那些" sub" -dictionaries,而非主要的那些。
P.S。:如果你真的想利用python的便利,你甚至可以简单地写一下
for i in G:
G[i].pop('noone', None)
使用second argument into pop,您甚至不必检查是否“没有人”'首先是G [i]中的一个键,因为pop方法不会引发异常。 (如果您在没有第二个参数的情况下尝试了这个双线程,那么对于所有没有“没有人”的子代码,您会收到错误。
答案 1 :(得分:1)
迭代值并从每个值中弹出键:
for v in G.values():
_ = v.pop('noone', None)
答案 2 :(得分: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}}