2012-04-03 18 views
16

ho una stringa e una lista di oggetti:Tipo: Formato Richiede Mapping

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) 

ottengo:

TypeError: format requires a mapping 

Come dovrei stampare questa? Sto cercando di stampa:

1 : big 
2 : small 

Grazie

risposta

13

Dal momento che la stringa di formattazione usi suddetti parametri:

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

È necessario fornire chiavi (i nomi) in un dizionario come argomento di riferimento alle chiavi di formattazione denominate nella stringa di formattazione:

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

Quindi il tuo codice woul d essere:

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

Grazie funziona! – Neeran

3

che serve per trasformare obj e con in un dizionario - il codice corrente passa in un tuple.

Se non si cura ciò che accade a objects successivamente, utilizzare dict.update:

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

1 : big 
2 : small 

Se non si desidera objects modificati, è necessario costruire un dizionario intermedio:

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

1 : big 
2 : small 
Problemi correlati