我有这个
[('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}]]
你能帮我纠正我的地图功能吗?
答案 0 :(得分:8)
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}]
答案 1 :(得分: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。