Вы можете попробовать:
dict((k, bigdict[k]) for k in ('l', 'm', 'n'))
... или в Python 3Python версии 2.7 или более поздней (спасибо Фабио Динизу за то, что указал, что он работает и в 2.7) :
{k: bigdict[k] for k in ('l', 'm', 'n')}
Обновление: как указывает Håvard S , я предполагаю, что вы знаете, что ключи будут в словаре - посмотрите его ответ, если вы не можете сделать такое предположение. В качестве альтернативы, как указывает Тимбо в комментариях, если вы хотите, чтобы ключ, который отсутствует в bigdict
карте None
, можно выполнить:
{k: bigdict.get(k, None) for k in ('l', 'm', 'n')}
Если вы используете Python 3 и вам нужны только ключи в новом dict, которые фактически существуют в исходном, вы можете использовать этот факт для просмотра объектов, реализующих некоторые операции над множествами:
{k: bigdict[k] for k in bigdict.keys() & {'l', 'm', 'n'}}
bigdict
не содержитk
{k: bigdict.get(k,None) for k in ('l', 'm', 'n')}
будет иметь дело с ситуацией, когда указанный ключ отсутствует в исходном словаре, установив ключ в новом dict как Nonebigdict.keys() & {'l', 'm', 'n'}
==>bigdict.viewkeys() & {'l', 'm', 'n'}
для Python2.7Немного короче, по крайней мере:
источник
dict((k,bigdict.get(k,defaultVal) for k in wanted_keys)
если вы должны иметь все ключи.источник
Немного сравнения скорости для всех упомянутых методов:
Как и следовало ожидать: словарное понимание - лучший вариант.
источник
key
их не существуетbigdict
.В этом ответе используется словарное понимание, аналогичное выбранному ответу, но оно не распространяется на отсутствующий элемент
версия Python 2:
версия Python 3:
источник
Может быть:
Python 3 даже поддерживает следующее:
Обратите внимание, что вы можете проверить наличие в словаре следующим образом:
соответственно для питона 3
источник
a
не вbigdict
Хорошо, это то, что беспокоило меня несколько раз, так что спасибо, Джаеш, за то, что спросили.
Приведенные выше ответы кажутся таким же хорошим решением, как и любое, но если вы используете это во всем коде, имеет смысл обернуть функциональность IMHO. Кроме того, здесь есть два возможных варианта использования: один, где вас интересует, все ли ключевые слова находятся в исходном словаре. и тот, где вы этого не сделаете. Было бы неплохо относиться к обоим одинаково.
Итак, для моего достоинства в два пеннета я предлагаю написать подкласс словаря, например
Теперь вы можете вытащить под-словарь с
Примеры использования:
Если вы запустите весь приведенный выше код, вы должны увидеть (что-то вроде) следующий вывод (извините за форматирование):
источник
subdict(orig_dict, keys, …)
?Вы также можете использовать
map
(это очень полезная функция, чтобы узнать все равно):sd = dict(map(lambda k: (k, l.get(k, None)), l))
Пример:
PS: я позаимствовал
.get(key, None)
из предыдущего ответа :)источник
Еще один (я предпочитаю ответ Марка Лонгаира)
источник
решение
примеры использования
источник