Подтвердить что ты не робот

Удаление записей из словаря на основе значений

У меня есть словарь с целым рядом с ключом-символом. Я хочу удалить все эти пары значений, где значение равно 0.

Например:

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

Я хочу сменить тот же словарь:

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

Есть ли простой способ сделать это?

4b9b3361

Ответ 1

Вы можете использовать dict-понимание:

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

Или, в pre-2.7 Python, конструктор dict в сочетании с выражение генератора:

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

Ответ 2

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

Для Pre-Python 2.7:

hand = dict((k, v) for k, v in hand.iteritems() if v != 0)

В обоих случаях вы отфильтровываете ключи со значениями 0 и присваиваете hand новому словарю.

Ответ 3

Если вы не хотите создавать новый словарь, вы можете использовать это:

>>> 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}
>>> 

Ответ 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)