2012-04-03 129 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']} 

因此,您的代碼woul d是:

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

感謝它的工作! – Neeran 2012-04-03 09:18:54

3

您需要打開objcon成一個字典 - 你目前的代碼通過在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