2012-06-15 3 views
7

У меня есть словарь, который имеет ключи, связанные со списками.Доступ к элементам в списках в словаре python

mydict = {'fruits': ['banana', 'apple', 'orange'], 
     'vegetables': ['pepper', 'carrot'], 
     'cheese': ['swiss', 'cheddar', 'brie']} 

То, что я хочу сделать, это использовать, если заявление, что если при поиске элемента и его ни в одном из списков в словаре он возвращает ключ. Это то, что я пытался:

item = cheddar 
if item in mydict.values(): 
    print key 

, но это ничего не делать, то вывод должен быть:

cheese 

Это, кажется, как простая вещь, но я просто не могу понять это. Любая помощь потрясающая.

ответ

7

Вы должны будете использовать for, простой if не достаточно, чтобы проверить неизвестный набор списков:

for key in mydict.keys(): 
    if item in mydict[key]: 
     print key 

подход без явного for заявление было бы возможно так:

foundItems = (key for key, vals in mydict.items() if item in vals) 

, который возвращает все ключи, связанные с item. Но внутренне, все еще происходит какая-то итерация.

+0

Что делать, если я хочу «получить» список, связанный с каждым ключом, и превратить его в «temp_array» внутри цикла for, для моих собственных вычислений? Предположим, что мне нужно проверить что-то относительно значений списка. В моем случае списки будут содержать только целые числа. – FaCoffee

+1

@FrancescoCastellani зависит от вашего фактического использования; вы можете просто получить доступ к 'mydict [key]' на любой итерации, как в первом фрагменте; или вы можете сделать что-то вроде 'map (mydict.values ​​(), own_calculations)'. – phg

2
mydict = {'fruits': ['banana', 'apple', 'orange'], 
    'vegetables': ['pepper', 'carrot'], 
    'cheese': ['swiss', 'cheddar', 'brie']} 

item = "cheddar" 
if item in mydict['cheese']: 
    print ("true") 

это работает, но вы должны ссылаться на ключи в словаре, как сыр, овощи и т.д., а не из-за того, как вы сделали словарь, надеюсь, что это помогает!

1
mydict = {'fruits': ['banana', 'apple', 'orange'], 
    'vegetables': ['pepper', 'carrot'], 
    'cheese': ['swiss', 'cheddar', 'brie']} 

item = "cheddar" 

for key, values in mydict.iteritems(): 
    if item in values: 
     print key 

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

reverse_index = {} 

for k, values in mydict.iteritems(): 
    for v in values: 
     reverse_index[v] = k 

print reverse_index.get("cheddar") 
print reverse_index.get("banana") 

Таким образом, вы не» t должен проходить список values каждый раз, чтобы найти товар.

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