Как вы проверяете наличие множества ключей в словаре Python? - PullRequest
8 голосов
/ 11 мая 2010

У меня есть следующий словарь:

sites = {
    'stackoverflow': 1,
    'superuser': 2,
    'meta': 3,
    'serverfault': 4,
    'mathoverflow': 5
}

Чтобы проверить, есть ли в приведенном выше словаре несколько ключей, я сделаю что-то вроде:

'stackoverflow' in sites and 'serverfault' in sites

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

Ответы [ 4 ]

12 голосов
/ 11 мая 2010

Вы можете притвориться, что ключи из набора являются набором, а затем использовать set.issubset:

set(['stackoverflow', 'serverfault']).issubset(sites) # ==> True

set(['stackoverflow', 'google']).issubset(sites) # ==> False
9 голосов
/ 11 мая 2010

Вы можете использовать all:

print( all(site in sites for site in ('stackoverflow','meta')) )
# True
print( all(site in sites for site in ('stackoverflow','meta','roger')) )
# False
1 голос
/ 11 мая 2010
mysites = ['stackoverflow', 'superuser']
[i for i in mysites if i in sites.keys()]  # ==> sites in the list mysites that are in your dictionary
[i for i in mysites if i not in sites.keys()]  # ==> sites in the list mysites that are not in your dictionary
0 голосов
/ 11 мая 2010

Сколько поисков вы планируете сделать? Я думаю, что метод, который вы используете, это хорошо.

Если есть десятки, сотни и т. Д. Ключей, с которыми вы сравниваете, вы можете поместить все целевые ключи в список, а затем выполнить итерацию по списку, проверяя, есть ли каждый элемент в словаре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...