2012-04-03 32 views
16

Tôi có một chuỗi và một danh sách các đối tượng:Loại Lỗi: Format Yêu cầu 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) 

tôi nhận được:

TypeError: format requires a mapping 

Làm thế nào tôi sẽ in này? Tôi cố gắng để in:

1 : big 
2 : small 

Cảm ơn bạn

Trả lời

13

Kể từ chuỗi định dạng của bạn sử dụng tên thông số:

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

Bạn cần cung cấp chìa khóa (tên) trong một cuốn từ điển như một đối số tham chiếu trở lại các khóa định dạng có tên trong chuỗi định dạng:

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

Vì vậy, mã của bạn sẽ thay đổi d là:

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

Cảm ơn nó hoạt động! – Neeran

3

Bạn cần phải bật objcon vào một từ điển - mã hiện tại của bạn đi trong một tuple.

Nếu bạn không quan tâm những gì xảy ra với objects sau đó, sử dụng dict.update:

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

1 : big 
2 : small 

Nếu bạn không muốn objects sửa đổi, bạn sẽ cần phải xây dựng một từ điển trung gian:

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

1 : big 
2 : small 
Các vấn đề liên quan