Python使用函数式编程按奇偶规则将列表转为字典如何实现
问题解决:Python函数式实现列表转指定规则字典
错误原因
你的代码核心问题出在map的输出结构不符合dict构造的要求:map会将每个输入元素映射为单个输出元素,奇数元素映射为二元组(x,x)符合要求,但偶数元素映射为包含两个二元组的chain迭代器,导致传入dict的可迭代序列结构为[(1,1), <chain迭代器>, (3,3)]。dict处理chain迭代器时,会把它本身当成一个二元可迭代对象,取第一个元素(4,2)作为键、第二个元素(6,2)作为值,就得到了你看到的错误输出。
正确实现思路
需要先把每个元素生成的键值对集合全部展平为一维的二元组序列,再传给dict构造,使用itertools.chain.from_iterable即可完成展平操作。
代码实现
from itertools import chain print( dict( chain.from_iterable( map( lambda x: [(x, x)] if x % 2 == 1 else [(x*2, x), (x*3, x)], [1, 2, 3] ) ) ) )
如果偏好更简洁的写法,也可以用字典推导式实现,逻辑更直观:
print({k: x for x in [1,2,3] for k in ([x] if x%2==1 else [x*2, x*3])})
两种写法的输出均为{1: 1, 4: 2, 6: 2, 3: 3},和你给出的循环代码效果完全一致。
内容的提问来源于stack exchange,提问作者DedAzaMarks
相关产品推荐
相关产品推荐

