2012-04-03 125 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