如何用Lambda函数对字典中数值列表各元素乘2并返回新字典
解决字典列表元素翻倍的问题
嘿,我懂你的困扰!你当前的代码里有两个小问题:
- 当你对列表用
x * 2时,Python会把整个列表重复一遍(比如[2,4]*2变成[2,4,2,4]),而不是把每个元素都乘以2 - 你最后用
list(map(...))得到的是一个纯列表,丢失了原字典里的键,自然没法得到你想要的新字典
要实现你要的效果,我们需要同时遍历原字典的键和值,并且让lambda作用在列表的每个元素上,而不是整个列表本身。这里给你两种符合需求的写法:
方法1:字典推导式 + map + lambda(贴合你的需求)
a = {'Andy':[2,4,6,8],'Bryce':[1,2,3], 'Charile': [3,6], 'David':[10], 'Elaine' :[5,10]} new_a = {key: list(map(lambda num: num * 2, values)) for key, values in a.items()}
方法2:字典推导式 + 列表推导式(更直观,可选)
如果你觉得lambda在这里有点多余,也可以用列表推导式直接处理元素,效果完全一样:
new_a = {key: [num * 2 for num in values] for key, values in a.items()}
运行上面的代码后,new_a就会是你期望的结果:
{'Andy': [4, 8, 12, 16], 'Bryce': [2, 4, 6], 'Charile': [6, 12], 'David': [20], 'Elaine': [10, 20]}
简单解释一下:
- 我们用
a.items()遍历原字典的每一组键值对 - 对每个值列表,用
map(lambda num: num*2, values)把列表里的每个元素都乘以2,再转成列表 - 最后将原键和处理后的列表对应起来,生成新字典
内容的提问来源于stack exchange,提问作者Zhuojing Xie
相关产品推荐
相关产品推荐

