我有一个带有字符整数键值对的字典。我想删除所有的键值对,其中的值是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