我有一個帶有字符整數鍵值對的字典。我想刪除所有的鍵值對,其中的值是0基於值從字典中刪除條目
例如:
>>> hand
{'a': 0, 'i': 0, 'm': 1, 'l': 1, 'q': 0, 'u': 0}
我想減少相同的字典這樣:
>>> hand
{'m': 1, 'l': 1}
有一個簡單的如何做到這一點?
我有一個帶有字符整數鍵值對的字典。我想刪除所有的鍵值對,其中的值是0基於值從字典中刪除條目
例如:
>>> hand
{'a': 0, 'i': 0, 'm': 1, 'l': 1, 'q': 0, 'u': 0}
我想減少相同的字典這樣:
>>> hand
{'m': 1, 'l': 1}
有一個簡單的如何做到這一點?
您可以使用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}
請注意,這會刪除評估爲「False」的所有值。如果您還有非整數值,則這個值會有細微的差別。 – 2013-03-01 13:24:22
@Lattyware:它看起來像OP只有整數作爲值...我只能用我得到:) – 2013-03-01 13:37:19
使用'.items'而不是'.iteritems'對於更大的數據集可能是非常低效的。 – Don 2014-08-28 14:24:20
字典理解?
{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)
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
新字典。
IMO:比使用'iteritems'好得多Niklas'回答 – Don 2014-08-28 14:25:17
如果你不希望創建一個新的字典,您可以使用此:
>>> 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}
>>>
Python 3中不允許這樣做:'Traceback(最近調用最後一個): 文件「
@ bugmenot123嘗試列表中的鍵(hand.keys()):' – Fabian 2016-04-30 18:49:41
謝謝!我自己結束了這個解決方案,但忘記了我發佈在這裏。 :) – bugmenot123 2016-04-30 20:57:56
看到this..http://stackoverflow.com/questions/5447494/best-way-to-remove -on-item-from-python-dictionary – 2013-03-01 13:15:01