Удаление записей из словаря на основе значений
У меня есть словарь с целым рядом с ключом-символом. Я хочу удалить все эти пары значений, где значение равно 0.
Например:
>>> hand
{'a': 0, 'i': 0, 'm': 1, 'l': 1, 'q': 0, 'u': 0}
Я хочу сменить тот же словарь:
>>> hand
{'m': 1, 'l': 1}
Есть ли простой способ сделать это?
Ответы
Ответ 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)