2012-06-15 14 views
7

Mam słownik, który ma klucze powiązane z listami.Uzyskiwanie dostępu do pozycji na listach w słowniku python

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

Co chcę zrobić jest użycie instrukcji if, że jeśli będę szukać pozycji i jej w żadnej z list w słowniku powróci klucz. To, co starałem:

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

ale nie robi nic, wyjście powinno być:

cheese 

Wydaje się to proste rzeczy, ale po prostu nie mogę zrozumieć. Każda pomoc jest niesamowita.

Odpowiedz

7

Będziesz musiał użyć for, prosty if nie wystarcza, by sprawdzić nieznaną zestaw list:

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

Podejście bez wyraźnego for stwierdzeniem byłoby możliwe tak:

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

która zwraca wszystkie klucze powiązane z item. Ale wewnętrznie nadal trwa iteracja.

+0

Co jeśli chcę "uzyskać dostęp" do listy powiązanej z każdym kluczem i przekształcić ją w 'temp_array' wewnątrz pętli for, dla własnych obliczeń? Powiedzmy, że muszę sprawdzić coś odnośnie wartości na liście. W moim przypadku listy będą zawierały wyłącznie liczby całkowite. – FaCoffee

+1

@FrancescoCastellani zależy od rzeczywistego przypadku użycia; możesz uzyskać dostęp do 'mydict [key]' w dowolnej iteracji, tak jak w pierwszym fragmencie; lub możesz zrobić coś takiego jak '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") 

to działa, ale trzeba odwołać klucze w słowniku jak ser, warzywa itp zamiast ze względu na sposób, w jaki uczynił słownika nadzieję, że to pomaga!

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 

Jeśli masz zamiar zrobić wiele tego rodzaju poszukiwań, myślę, że można utworzyć odwrotnej indeksu dla oryginalnego mydict przyspieszyć zapytań:

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") 

ten sposób don” • za każdym razem, aby znaleźć przedmiot, musisz przejść przez listę values.

Powiązane problemy