Pythonic сокращение для слов в словаре? - PullRequest
5 голосов
/ 14 августа 2011

Простой вопрос: существует ли сокращение для проверки наличия нескольких слов в словаре?

'foo' in dct and 'bar' in dct and 'baz' in dct

Ответы [ 3 ]

8 голосов
/ 14 августа 2011
all(x in dct for x in ('foo','bar','baz'))
7 голосов
/ 14 августа 2011

Вы можете использовать all() с выражением генератора :

>>> all(x in dct for x in ('foo', 'bar', 'qux'))
False
>>> all(x in dct for x in ('foo', 'bar', 'baz'))
True
>>> 

Это сэкономит вам колоссальные 2 символа (но сэкономит вам гораздо большеесли у вас есть более длинный список для проверки).

5 голосов
/ 14 августа 2011
{"foo","bar","baz"}.issubset(dct.keys())

Для python <2.7 вам придется заменить установленный литерал на <code>set(["foo","bar","baz"])

Если вам нравятся операторы и вы не возражаете против создания другого набора, вы можете использовать оператор <= для набора и набора ключей.

Оба варианта будут выглядеть так:

set(["foo","bar","baz"]) <= set(dct)

Наконец, если вы используете Python 3, dict.keys() вернет объект типа set, что означает, что вы можете вызывать оператор без потери производительности, как это:

{"foo","bar","baz"} <= dct.keys()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...