web-dev-qa-db-ja.com

タイプエラー:フォーマットにはマッピングが必要

文字列とオブジェクトのリストがあります。

gpl = "%(id)s : %(atr)s"

objects = [{'id':1, 'content':[{'atr':'big', 'no':2}]},  {'id':2, 'content': [{'atr':'small', 'no':3}]}]

for obj in objects:
   for con in obj['content']:
       print gpl %(obj,con)

私は得る:

TypeError: format requires a mapping

これをどのように印刷しますか?印刷しようとしています:

1 : big
2 : small

ありがとうございました

21
Neeran

書式設定文字列は名前付きパラメータを使用するため、次のようになります。

gpl = "%(id)s : %(atr)s"

書式設定文字列内の名前付き書式設定キーを参照するための引数として、辞書にキー(名前)を指定する必要があります。

print gpl % {'id': obj['id'], 'atr': con['atr']}

したがって、コードは次のようになります。

for obj in objects:
    for con in obj['content']:
        print gpl% {'id': obj['id'], 'atr': con['atr']}
17
Preet Kukreti

objconを1つの辞書に変換する必要があります。現在のコードはTupleを渡します。

その後objectsがどうなるか気にしない場合は、 dict.update を使用してください。

for obj in objects:
    for con in obj["content"]:
        con.update(obj)
        print gpl % con

1 : big
2 : small

objectsを変更したくない場合は、中間辞書を作成する必要があります。

for obj in objects:
    for con in obj["content"]:
        print gpl % {'id': obj["id"], 'atr': con["atr"]}

1 : big
2 : small
3
Wieland