在字典中迭代列表值

2024-09-30 05:24:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个家长班:

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字典中查找键,我了解了它的工作原理,但我不确定它为什么不在值列表中同时返回这两个值。你知道吗

与仅仅提供一个快速而肮脏的答案相比,额外阅读的指针是值得赞赏的,因为这是我第一次使用超出单个值的字典。你知道吗


Tags: self字典objectfoodtreesclassgrassturtle
3条回答

请看这里:

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

对于foods,它是对的,即['Grass', 'Trees']。你知道吗

但是你做了for food in foods: return foodreturn只返回for loop,因此得到一个结果。你知道吗

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

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

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

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

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

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

相关问题 更多 >

    热门问题