2013-05-17 75 views
0

我試圖打印出與字典中的值項關聯的鍵,如果在調用函數時提供了該值項。打印出與字典中的多個值相關聯的鍵

例如(這一點也適用):

def test(pet): 
    dic = {'Dog': 'der Hund' , 'Cat' : 'der Katze' , 'Bird': 'der Vogel'} 

    items = dic.items() 
    key = dic.keys() 
    values = dic.values() 
    for x, y in items: 
    if y == pet: 
     print x 

但是,每當我添加多個值,一鍵停止工作,我不知道爲什麼?

dic = {'Dog': ['der Hund', 'der Katze'] , 'Cat' : 'der Katze' , 'Bird': 'der Vogel'} 

給我沒有輸出它不打印x。

有人可以幫忙嗎?

+1

你確定你的詞典是圍繞正確的方式? – jamylak

回答

3

你的上述條件:

... 
for x, y in items: 
    if y == pet: 
... 

測試如果(鍵,值對)的值是值pet。但是,當字典值是一個列表時,您確實想知道pet是否在列表中。所以,你可以嘗試:

... 
for x, y in dic.items(): 
    if pet in y: 
     print x 

注意,這兩種情況下返回true:

pet = "crocodile" 
list_value = ["I", "am", "a", "crocodile"] 
single_value = "crocodile" 

pet in list_value 
--> True 

pet in single_value 
--> True 

希望這有助於

+0

那肯定是的,謝謝你的快速回復和簡單易懂的解釋!!!!! – Danrex

+0

太棒了!聽到。 :) –

0

它不工作,因爲你是混合字符串和列表,爲什麼不讓他們全部列出?

def test(pet): 
    items = dic.items() 
    key = dic.keys() 
    values = dic.values() 
    for x, y in items: 
     for item in y: # for each item in the list of dogs 
      if item == pet: 
       print x 

dic = {'Dog': ['der Hund', 'der Katze'] , 'Cat' : ['der Katze'] , 'Bird': ['der Vogel']} 
test('der Hund') 

>>> 
Dog 

由於訂單似乎並不在你的情況下無所謂了,你只檢查會員,這將是最好使用set代替。您也可以簡單地檢查if pet in y而不是通過自己迭代。

def test(pet): 
    for k, v in dic.items(): 
     if pet in v: 
      print k 

dic = {'Dog': {'der Hund', 'der Katze'}, # sets instead of lists 
     'Cat': {'der Katze'}, 
     'Bird': {'der Vogel'}} 

test('der Hund') 

>>> 
Dog 
+0

喲是什麼意思#for表中的項目? – Danrex

+0

@ user2352648這只是一個評論,表明我正在瀏覽列表中的每個項目 – jamylak