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。

有人可以帮忙吗?

4

2 回答 2

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

希望这可以帮助

于 2013-05-17T01:46:30.560 回答
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

由于 Order 在您的情况下似乎并不重要,并且您只是在检查成员资格,因此最好使用 aset代替。您也可以简单地检查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
于 2013-05-17T01:52:57.283 回答