2013-05-17 78 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

相关问题