Почему при попытке передачи словаря как аргумента map() появляется ошибка?

a = {
	'title': 'course_title',
	'subtitle': 'course_subtitle',
	'id': 'course_id'
	}
print(list(map(lambda obj: f"({obj['id']}) {obj['title']} - {obj['subtitle']}", a)))

Попытался подставить в форматную строку значения из словаря, но получил ошибку
TypeError: string indices must be integers
В чём может быть проблема?
  • Вопрос задан
  • 114 просмотров
Решения вопроса 2
shurshur
@shurshur
Сисадмин, просто сисадмин...
Потому что map принимает list в качестве второго аргумента, а приведение dict к list - это список ключей, так что obj в lambda будет строкой.

Можно посмотреть, что покажут эти print для понимания:

print (list(a))
print (list(map(lambda x: x, a)))


Решение: вместо obj['id'] использовать в lambda-выражении a[obj]['id']
Ответ написан
Комментировать
adugin
@adugin Куратор тега Python
Всё гораздо проще:
'({id}) {title} - {subtitle}'.format(**a)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы