2015-11-23 4 views
0

Так что это связано с более коротким вопросом, публикуемую здесь раньше: Get key by value in dictionaryПолучить ключ словаря по значению, если значение списка

Я приспособил пример, что значения быть list s из int. Скажем, у меня было это,

mydict = {'george':[1,2,3],'amber':[18,19]} 

тогда я мог бы выход "amber" по:

print(list(mydict.keys())[list(mydict.values()).index([18,19])]) 

Есть ли способ, чтобы изменить это, так что я может выводить "amber" на «просят» только для одного элемента списка? т.е. 19?

Резюме: Я хочу спросить мой словарь: «Дайте мне ключ, который имеет в своем значении (список), пункт„19“

+2

Если вам нужно это делать часто, у вас возникла проблема с дизайном. Вы действительно должны идти * другим способом, от 'key' ->' value' –

+0

Да, я знаю об этом. Структура данных под рукой требует от меня на этот раз попробовать все наоборот. Спасибо в любом случае =) – sibert

ответ

8

Используйте список понимание с условной

>>> mydict = {'george':[1,2,3],'amber':[18,19]} 
>>> [i for i in mydict if 19 in mydict[i]] 
['amber'] 

Здесь вы получите список всех ключей, который имеет в своем значении список с пунктом 19.

Если вы хотите только первый элемент, который вы можете использовать [i for i in mydict if 19 in mydict[i]][0]

Другой инновационный способ будет использовать filter

>>> filter(lambda x: 19 in x[1], mydict.items()) 
[('amber', [18, 19])] 

Обратите внимание, что здесь вы получите ключ и значение в качестве пары.

1

Адаптирование ответа от вопроса вы связаны:

for name, l in mydict.iteritems(): 
    if 19 in l: 
     print name 
0

Предполагая, что вы хотите найти много раз, выстраивая поиск по индексу непосредственно будет быстрее:

mydict = {'george':[1,2,3],'amber':[18,19]} 
lookup = dict((number, name) for name, numbers in mydict.items() for number in numbers) 
print lookup[19] 

Недостатка является этим показателем необходимо перестроить или обновить, если изменения mydict.

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