Map lambda создание словаря

у меня есть это

[('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}]]

Можете ли вы помочь мне исправить мою функцию карты?

Будут ли списки внутри ваших кортежей содержать дубликаты?

Sunny Patel 19.04.2018 17:10
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
219
2

Ответы 2

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.

Другие вопросы по теме