2017-01-24 178 views
2

我是一个非常初学Python的人。从Python字典中删除键/值对

我试图消除所有的“没有人:0”从这个字典,所以它看起来与下面相同的,但没有任何的“没有人: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

的[从字典中删除元素(HTTP可能重复: //stackoverflow.com/questions/5844672/delete-an-element-from-a-dictionary) –

回答

4

我相信这会做你想要什么。

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

你在这里什么(G)确实是一本字典,但更具体,这是一本字典,其值也是字典。因此,当我们迭代G中的所有键时(),每个键的对应值(G[i])都是一个字典。你可以看到自己这一点,如果你尝试运行:

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

那么你真正想要做的是从G中每个字典也就是说,每个G [I]流行,要删除“没有人”从那些“子”的矛盾,不是主要的一个。


PS:如果你真的想利用Python的方便,你甚至可以编写简单

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

通过使用second argument into pop,你甚至不用检查,看看是否“没有人'首先是G [i]的关键,因为pop方法不会引发异常。 (如果你在没有第二个参数的情况下尝试这个双线程的话,你会在所有没有'noone'的子字典中得到一个错误)。

+0

https://docs.python.org/3/glossary.html#term-eafp – wwii

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

遍历值和每个值弹出键:

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