Фильтр содержит только определенные ключи?

406
задан lospejos 7 December 2017 в 00:39
поделиться

4 ответа

Создание нового словаря:

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]
568
ответ дан 22 November 2019 в 23:18
поделиться

Вот другой простой метод с помощью 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]
0
ответ дан Black Thunder 4 November 2019 в 09:05
поделиться
  • 1
    но вопрос состоит в том, как первый язык был записан? – ajsie 10 January 2010 в 02:39

Вот пример в 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 .

Этот метод работает медленнее, чем ответ Делнана, если вы хотите выбрать только несколько из очень многих ключей.

64
ответ дан 22 November 2019 в 23:18
поделиться

Учитывая ваш исходный словарь orig и набор записей, которые вас интересуют, в keys :

filtered = dict(zip(keys, [orig[k] for k in keys]))

что не так хорошо, как ответ Делнана, но должно работать в каждая интересующая версия Python. Однако он уязвим для каждого элемента ключей , существующих в вашем исходном словаре.

14
ответ дан 22 November 2019 в 23:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: