у меня есть это
[('h', ['ab', 'aus']), ('c', ['ab', 'escu']), ('n', ['lia', 'lmos'])]
я хочу этот
[{'ab': 1, 'aus': 1}, {'ab': 1, 'escu': 1}, {'lia': 1, 'lmos': 1}]
Я пытался
map(lambda row: [{b: 1 } for b in row[1]])
полученные результаты
[[{‘ab': 1}, {'aus': 1}], [{'ab': 1}, {'escu': 1}], [{'lia': 1}, {'lmos': 1}]]
Можете ли вы помочь мне исправить мою функцию карты?






map здесь не подходит. Что, если ваши списки содержат более одного элемента? Вместо этого я бы рекомендовал использовать Counter.
>>> from collections import Counter
>>> [dict(Counter(y)) for _, y in data]
[{'ab': 1, 'aus': 1}, {'ab': 1, 'escu': 1}, {'lia': 1, 'lmos': 1}]
Если подпункты вашего списка уникальны, вы можете вместо этого выбрать dict.fromkeys.
>>> [dict.fromkeys(y, 1) for _, y in data]
[{'ab': 1, 'aus': 1}, {'ab': 1, 'escu': 1}, {'lia': 1, 'lmos': 1}]
Я согласен с ответом @ cᴏʟᴅsᴘᴇᴇᴅ. Но чтобы получить то, что вы хотели, с помощью лямбда-функции, вы на самом деле были довольно близки:
row = [('h', ['ab', 'aus']), ('c', ['ab', 'escu']), ('n', ['lia', 'lmos'])]
e = list(map(lambda x: {b:1 for b in x[1]}, row))
print(e)
Выход:
[{'ab': 1, 'aus': 1}, {'ab': 1, 'escu': 1}, {'lia': 1, 'lmos': 1}]
Обратите внимание на нотацию {} в цикле for: синтаксис понимания dict.
Будут ли списки внутри ваших кортежей содержать дубликаты?