映射lambda创建字典

2024-10-01 02:18:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个

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

你能帮我修改地图功能吗?你知道吗


Tags: lambdainmapforabrowaus地图功能
2条回答

我同意cᴏʟᴅsᴘᴇᴇᴅ的回答。但要用lambda函数得到您想要的结果,实际上非常接近:

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 comprehension syntax。你知道吗

在这里使用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}]

相关问题 更多 >