36

我有一个带有字符整数键值对的字典。我想删除所有值为 0 的键值对。

例如:

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

我想将同一个字典简化为:

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

有没有简单的方法可以做到这一点?

4

4 回答 4

32

您可以使用字典理解

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

或者,在 2.7 之前的 Python 中,dict构造函数与生成器表达式相结合:

>>> dict((k, v) for k, v in hand.iteritems() if v)
{'m': 1, 'l': 1}
于 2013-03-01T13:13:03.513 回答
11
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给新字典。

于 2013-03-01T13:13:05.980 回答
10

如果您不想创建新字典,可以使用以下命令:

>>> 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}
>>> 
于 2013-03-01T13:20:05.537 回答
4

听写理解?

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

在 python 2.6 及更早版本中:

dict((k, v) for k, v in hand.items() if v != 0)
于 2013-03-01T13:12:54.787 回答