Почему при попытке передачи словаря как аргумента map() появляется ошибка?
Потому что map принимает list в качестве второго аргумента, а приведение dict к list - это список ключей, так что obj в lambda будет строкой.
Можно посмотреть, что покажут эти print для понимания:print (list(a))
print (list(map(lambda x: x, a)))
Решение: вместо obj['id'] использовать в lambda-выражении a[obj]['id']
Всё гораздо проще:'({id}) {title} - {subtitle}'.format(**a)