映射lambda创建字典

sar*_*nes 2 python dictionary

我有这个

[('h', ['ab', 'aus']), ('c', ['ab', 'escu']), ('n', ['lia', 'lmos'])]
Run Code Online (Sandbox Code Playgroud)

我要这个

[{'ab': 1, 'aus': 1}, {'ab': 1, 'escu': 1}, {'lia': 1, 'lmos': 1}]
Run Code Online (Sandbox Code Playgroud)

我试过了

map(lambda row: [{b: 1 } for b in row[1]])
Run Code Online (Sandbox Code Playgroud)

结果

[[{‘ab': 1}, {'aus': 1}], [{'ab': 1}, {'escu': 1}], [{'lia': 1}, {'lmos': 1}]]
Run Code Online (Sandbox Code Playgroud)

你能帮我纠正我的地图功能吗?

cs9*_*s95 8

A 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}]
Run Code Online (Sandbox Code Playgroud)

如果您的列表子项是唯一的,您可以改为dict.fromkeys.

>>> [dict.fromkeys(y, 1) for _, y in data]
[{'ab': 1, 'aus': 1}, {'ab': 1, 'escu': 1}, {'lia': 1, 'lmos': 1}]
Run Code Online (Sandbox Code Playgroud)