0

mako テンプレートにネストされた dict の dict があり、それらをループしてキーを出力しようとしています。

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

私が抱えている問題は、「 mydict['fruits'][fruit]: の栄養の %:」

TypeError: 'int' オブジェクトは反復可能ではありません。

mydict['fruits'][fruit] がリストか整数かを確認するにはどうすればよいですか?

4

1 に答える 1

0

通常、mydict['fruits']は辞書であり、あなたのfruit意志が鍵になります。likeを使用してインデックスmydict['fruits']を作成すると、単一の項目が取得されます。これは明らかに整数であり、栄養のリストではありません。それが整数である理由は、コードの別の場所で発生します。fruitmydict['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 に答える