2013-03-01 49 views
21

我有一個帶有字符整數鍵值對的字典。我想刪除所有的鍵值對,其中的值是0基於值從字典中刪除條目

例如:

>>> hand 
{'a': 0, 'i': 0, 'm': 1, 'l': 1, 'q': 0, 'u': 0} 

我想減少相同的字典這樣:

>>> hand 
{'m': 1, 'l': 1} 

有一個簡單的如何做到這一點?

+0

看到this..http://stackoverflow.com/questions/5447494/best-way-to-remove -on-item-from-python-dictionary – 2013-03-01 13:15:01

回答

19

您可以使用dict comprehension

>>> { k:v for k, v in hand.items() if v } 
{'m': 1, 'l': 1} 

或者,在前期2.7 Python中,dict構造結合一個generator expression

>>> dict((k, v) for k, v in hand.iteritems() if v) 
{'m': 1, 'l': 1} 
+2

請注意,這會刪除評估爲「False」的所有值。如果您還有非整數值,則這個值會有細微的差別。 – 2013-03-01 13:24:22

+0

@Lattyware:它看起來像OP只有整數作爲值...我只能用我得到:) – 2013-03-01 13:37:19

+0

使用'.items'而不是'.iteritems'對於更大的數據集可能是非常低效的。 – Don 2014-08-28 14:24:20

2

字典理解?

{k: v for k, v in hand.items() if v != 0} 

在蟒蛇2.6和更早的版本:

dict((k, v) for k, v in hand.items() if v != 0) 
9
hand = {k: v for k, v in hand.iteritems() if v != 0} 

預Python 2.7版:

hand = dict((k, v) for k, v in hand.iteritems() if v != 0) 

在這兩種情況下,你會過濾掉其值0的鑰匙,並分配hand新字典。

+0

IMO:比使用'iteritems'好得多Niklas'回答 – Don 2014-08-28 14:25:17

6

如果你不希望創建一個新的字典,您可以使用此:

>>> hand = {'a': 0, 'i': 0, 'm': 1, 'l': 1, 'q': 0, 'u': 0} 
>>> for key in list(hand.keys()): ## creates a list of all keys 
...  if hand[key] == 0: 
...    del hand[key] 
... 
>>> hand 
{'m': 1, 'l': 1} 
>>> 
+2

Python 3中不允許這樣做:'Traceback(最近調用最後一個): 文件「」,第1行,在 RuntimeError:dictionary迭代期間更改大小 – bugmenot123 2016-04-29 13:07:58

+5

@ bugmenot123嘗試列表中的鍵(hand.keys()):' – Fabian 2016-04-30 18:49:41

+0

謝謝!我自己結束了這個解決方案,但忘記了我發佈在這裏。 :) – bugmenot123 2016-04-30 20:57:56