迭代字典中的列表值

时间:2016-06-22 04:46:54

标签: python python-3.x dictionary

我有一个父类:

class Animal(object):

    animalFoods = {'Elephant': ['Grass', 'Trees'], 'Turtle': 'Fish'}

    def animal_food(self):
        foods = Animal.animalFoods[self.__class__.__name__]
        for food in foods:
            return food

然后我有一个子类:

class Elephant(Animal):
    pass

我创建了一个对象:

Dumbo = Elephant()

尝试打印出它的食物选择:

>>> print(Dumbo.animal_food())
Grass

我希望它打印出来

Grass
Trees

我通过查找animalFoods字典中的键来了解它是如何工作的,但我不确定为什么它不会返回值列表中的两个值。

对于提供快速而肮脏的答案而言,指向额外阅读的指标是值得赞赏的,因为这是我第一次使用超出单一值的词典。

3 个答案:

答案 0 :(得分:3)

return food将立即终止您animal_food的执行;它不会尝试完成循环。如果你想变得非常花哨,你可以使用yield food将方法转换为生成器,但是对于这个例子你可能只想完全替换方法体:

def animal_food(self):
    return Animal.animalFoods[self.__class__.__name__]

答案 1 :(得分:0)

请看这里:

foods = Animal.animalFoods[self.__class__.__name__]
for food in foods:
    return food
对于foods

是正确的,即['Grass', 'Trees']

但你做for food in foods: return foodreturn只返回for loop,因此您会得到一个结果。

答案 2 :(得分:0)

一旦函数或方法返回一个值,for循环执行就会停止。

如果您只想打印项目,可以将print语句添加到类方法animal_food(),如下所示:

def animal_food(self):
  foods = Animal.animalFoods[self.__class__.__name__]
  for food in foods:
    print food

然后,调用Dumbo.animal_food()将打印两个答案。