Python字典推导式如何通过自定义函数动态生成key-value键值对
报错原因
你写的{{i: i+1} for i in range(4)}本质是集合推导式,集合要求所有元素都是可哈希类型,而字典本身不支持哈希,所以才会抛出TypeError: unhashable type: 'dict'错误。
实现方案
根据你的myfunc返回值的不同,有两种常用实现方式:
情况1:myfunc(i)返回(key, value)格式的元组
这是最推荐的写法,直接用dict()构造函数包裹生成器表达式即可,示例如下:
def myfunc(i): # 你的自定义逻辑,最终返回元组 return (i, i+1) # 生成目标字典 result = dict(myfunc(i) for i in range(4)) print(result) # 输出:{0: 1, 1: 2, 2: 3, 3: 4}
情况2:myfunc(i)返回{key: value}格式的单键字典
如果没法修改myfunc的返回格式,可以用两层循环的字典推导式实现:
def myfunc(i): # 你的自定义逻辑,最终返回单键字典 return {i: i+1} # 生成目标字典 result = {k: v for i in range(4) for k, v in myfunc(i).items()} print(result) # 输出:{0: 1, 1: 2, 2: 3, 3: 4}
如果是Python 3.9及以上版本,也可以用归并字典的写法:
from functools import reduce result = reduce(lambda a, b: a | b, (myfunc(i) for i in range(4)), {})
内容的提问来源于stack exchange,提问作者Teddy C
相关产品推荐
相关产品推荐

