根据值从字典中删除条目

One*_*ror 28 python

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

例如:

>>> hand
{'a': 0, 'i': 0, 'm': 1, 'l': 1, 'q': 0, 'u': 0}
Run Code Online (Sandbox Code Playgroud)

我想减少相同的字典:

>>> hand
{'m': 1, 'l': 1}
Run Code Online (Sandbox Code Playgroud)

有一个简单的方法吗?

Nik*_* B. 26

你可以使用dict理解:

>>> { k:v for k, v in hand.items() if v }
{'m': 1, 'l': 1}
Run Code Online (Sandbox Code Playgroud)

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

>>> dict((k, v) for k, v in hand.iteritems() if v)
{'m': 1, 'l': 1}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这会删除所有计算为"False"的值.如果您还有非整数值,这会略有不同. (2认同)

Vol*_*ity 9

hand = {k: v for k, v in hand.iteritems() if v != 0}
Run Code Online (Sandbox Code Playgroud)

对于Pre-Python 2.7:

hand = dict((k, v) for k, v in hand.iteritems() if v != 0)
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,您都会过滤出值为的键0,并分配hand给新词典.


Fab*_*ian 8

如果您不想创建新词典,可以使用:

>>> 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}
>>> 
Run Code Online (Sandbox Code Playgroud)

  • @ bugmenot123尝试`列表中的键(hand.keys()):` (5认同)
  • 这在Python 3中是不允许的:`Traceback(最近一次调用last):文件"<stdin>",第1行,在<module> RuntimeError:字典在迭代期间改变了大小 (2认同)