打印出字典中与多个值相关联的键



我试图打印出与字典中值项相关联的键,如果该值项是在我调用函数时提出的。

例如:

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

最新更新