Тип Ошибка: Формат Требуется Сопоставление
У меня есть строка и список объектов:
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
Спасибо
Ответы
Ответ 1
Поскольку ваша строка форматирования использует именованные параметры:
gpl = "%(id)s : %(atr)s"
Вам необходимо указать ключи (имена) в словаре в качестве аргумента для ссылки на именованные форматирующие клавиши в строке форматирования:
print gpl % {'id': obj['id'], 'atr': con['atr']}
Таким образом, ваш код будет выглядеть следующим образом:
for obj in objects:
for con in obj['content']:
print gpl% {'id': obj['id'], 'atr': con['atr']}
Ответ 2
Вам нужно включить obj
и con
в один словарь - ваш текущий код проходит в 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