2012-04-03 12 views
16

が必要です:種類のエラー:フォーマットが、私は文字列とオブジェクトのリストを持っているマッピング

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 

はあなたに

答えて

13

ありがとう:

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

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

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

d:あなたは1つの辞書にobjconを有効にする必要があり

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

ありがとうございます! – Neeran

3

- あなたの現在のコードはtupleに渡します。

あなたはdict.updateを使用し、その後objectsに何が起こるか気にしない場合:

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 
関連する問題