我试图打印出与字典中值项相关联的键,如果该值项是在我调用函数时提出的。
例如:
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
有人能帮忙吗?
您的上述条件:
...
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
希望能有所帮助
它不工作,因为你是混合字符串和列表,为什么不让他们所有的列表?
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