Создание нового словаря:
dict_you_want = { your_key: old_dict[your_key] for your_key in your_keys }
Использует понимание словаря.
Если вы используете версию, в которой они отсутствуют (например, Python 2.6 и более ранние), сделайте ее dict ((your_key, old_dict [your_key]) для ...)
. То же самое, только уродливее.
Обратите внимание, что эта, в отличие от версии jnnnnn, имеет стабильную производительность (зависит только от количества your_keys) для old_dict
s любого размера. И по скорости, и по памяти. Поскольку это выражение-генератор, оно обрабатывает по одному элементу за раз и не просматривает все элементы old_dict.
Удаление всего на месте:
unwanted = set(keys) - set(your_dict)
for unwanted_key in unwanted: del your_dict[unwanted_key]
Вот другой простой метод с помощью del
в одном лайнере:
for key in e_keys: del your_dict[key]
e_keys
список ключей, которые будут исключены. Это обновит Ваш dict вместо того, чтобы дать Вам новый.
, Если Вы хотите новый вывод dict, затем сделайте копию dict перед удалением:
new_dict = your_dict.copy() #Making copy of dict
for key in e_keys: del new_dict[key]
Вот пример в python 2.6:
>>> a = {1:1, 2:2, 3:3}
>>> dict((key,value) for key, value in a.iteritems() if key == 1)
{1: 1}
Фильтрующая часть - это оператор if
.
Этот метод работает медленнее, чем ответ Делнана, если вы хотите выбрать только несколько из очень многих ключей.
Учитывая ваш исходный словарь orig
и набор записей, которые вас интересуют, в keys
:
filtered = dict(zip(keys, [orig[k] for k in keys]))
что не так хорошо, как ответ Делнана, но должно работать в каждая интересующая версия Python. Однако он уязвим для каждого элемента ключей
, существующих в вашем исходном словаре.