2015-02-03 2 views
2

Для моей программы я хочу четко проверить, являются ли какие-либо элементы в списке ключом в словаре. До сих пор я могу только подумать, чтобы пройти через список и проверить.Использование набора в словарных словах

Однако есть ли способ упростить этот процесс? Есть ли способ использовать наборы? Через множества можно проверить, имеют ли два списка общие элементы.

ответ

5

Это должен быть легко с помощью встроенного any функции:

any(item in dct for item in lst) 

Это быстрое, эффективное и (ИМХО) достаточно readible. Что может быть лучше? :-)


Конечно, это не говорит вам , которые ключи находятся в Словаре. Если вам это нужно, лучше всего использовать словарные объекты зрения:

# python2.7 
dct.viewkeys() & lst # Returns a set of the overlap 

# python3.x 
dct.keys() & lst # Same as above, but for py3.x 
+0

Потому что любой возвращает только True или False? Таким образом, вы не получите общих элементов от этого. – user3467349

+0

Исходный вопрос: «Я хочу четко проверить, являются ли какие-либо элементы в списке ключом в словаре». Поэтому это решает этот вопрос. – huderlem

+0

@ user3467349 - Но это то, о чем попросил OP ... «Для моей программы я хочу четко проверить, являются ли какие-либо элементы в списке ключом в словаре». OP не просил узнать, какие ключи находятся в dict. Если вы хотите узнать, какие ключи, то это совсем другая история ... – mgilson

3

Вы можете проверить на пересечение между ключами словаря и элементами списка с помощью dict.keys:

if the_dict.keys() & the_list: 
    # the_dict has one or more keys found in the_list 

Демо:

>>> the_dict = {'a':1, 'b':2, 'c':3} 
>>> the_list = ['x', 'b', 'y'] 
>>> if the_dict.keys() & the_list: 
...  print('found key in the_list') 
... 
found key in the_list 
>>> 

Обратите внимание, что в Python 2.x, метод называется dict.viewkeys ,

+2

Не нужно создавать 'set'; в современном Python вы можете использовать 'the_dict.keys() & the_list', или в 2,' the_dict.viewkeys() & the_list'. – DSM

+0

Это потрясающий трюк, о котором я понятия не имел. – huderlem

1

Что касается эффективности, вы не можете быть более эффективными, чем перебирать список. Я также хотел бы утверждать, что цикл по списку уже является простым процессом.

+0

Спасибо, я прошу прощения за неправильный вопрос. Вероятно, я должен был сказать более чистый путь. – mrQWERTY

Смежные вопросы