36

文字と整数のキーと値のペアを持つ辞書があります。値が 0 のキーと値のペアをすべて削除したいと考えています。

例えば:

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

同じ辞書をこれに減らしたい:

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

それを行う簡単な方法はありますか?

4

4 に答える 4

32

dict 内包表記を使用できます。

>>> { 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 に答える