0

我在 mako 模板中有一个嵌套的 dicts 字典,并试图遍历它们以打印出它们的键。

%for fruit in mydict['fruits']:
   ${fruit}
   % for nutrition in mydict['fruits'][fruit]:
      ${nutrition}
   % endfor
%endfor

我遇到的问题是:“mydict['fruits'][fruit] 中的营养百分比:”

TypeError:'int' 对象不可迭代。

如何检查 mydict['fruits'][fruit] 是列表还是 int?

4

1 回答 1

0

通常,mydict['fruits']是字典,而您的fruit将是键。mydict['fruits']fruitlike索引mydict['fruits'][fruit]将导致获得单个项目,这显然是一个整数,而不是营养列表。为什么它是一个整数,是在您的代码中的其他地方引起的。

>>> for fruit in mydict['fruits']:
...   print fruit, mydict['fruits'][fruit]
...   for nutrition in mydict['fruits'][fruit]:
...     print nutrition
... 
kiwi 2
Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
TypeError: 'int' object is not iterable

更新

(令人困惑的是,问题发生了变化,因此我的答案需要更新。)

您可以使用isinstance(mydict['fruits'][fruit], list)和变体。

或者更好的是,确保事物始终是一个列表;即,将类型检查逻辑适当地放在 Python 代码中,而不是放在模板代码中。因为实际上,为什么整数会被一个营养素?

另外,考虑更简单的迭代 dict 的方法(假设这在 mako 中有效):

>>> for fruit, nutritions in mydict['fruits'].items():
...     if isinstance(nutritions, list):
...        for nutrition in nutritions:
...            print nutrition
于 2013-07-08T14:27:19.643 回答