2017-01-24 174 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)