我在mako模板中有一个嵌套的dicts字典,我试图遍历它们以打印出它们的密钥。
%for fruit in mydict['fruits']:
${fruit}
% for nutrition in mydict['fruits'][fruit]:
${nutrition}
% endfor
%endfor
我遇到的问题是: " mydict中的营养成分['水果'] [水果]:"
TypeError:' int'对象不可迭代。
如何检查mydict [' fruits'] [fruit]是列表还是int?
答案 0 :(得分:0)
通常,mydict['fruits']
是字典,而您的fruit
将是密钥。将mydict['fruits']
与fruit
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