2012-04-03 23 views
16

tengo una cadena y una lista de objetos:Tipo de error: formato requiere Mapeo

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) 

me sale:

TypeError: format requires a mapping 

¿Cómo puedo imprimir esto? Estoy tratando de impresión:

1 : big 
2 : small 

Gracias

Respuesta

13

parámetros Debido a que su cadena de formato usos mencionados:

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

Es necesario proporcionar claves (los nombres) en un diccionario como un argumento para referencia de nuevo a las teclas de formato con nombre en la cadena de formato:

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

Así que su código woul D Sea:

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

¡Gracias, funciona! – Neeran

3

lo necesario para convertir obj y con en un diccionario - el código de corriente pasa en un tuple.

Si no le importa lo que le sucede a objects después, utilizar dict.update:

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

1 : big 
2 : small 

Si no desea objects modificada, que necesita para construir un diccionario intermedia:

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

1 : big 
2 : small 
Cuestiones relacionadas