如何以Pythonic方式从列表与字典创建嵌套字典并实现扁平化?
用Pythonic方式从列表和字典创建嵌套字典
嘿,我来帮你搞定这个问题!你现在的代码得到的结果和预期不符,是因为zip(b, a)是把字典b的键和列表a的元素配对,但你需要的是把a的元素作为外层字典的键,对应的值是包含b中对应键值对的小字典。
生成嵌套字典的Pythonic写法
直接用字典推导式就能搞定,完全不需要显式循环:
a = [3, 4] b = {'a': 1, 'b': 2} # 简洁版写法 c = {num: {key: b[key]} for num, key in zip(a, b)}
运行这段代码后,c的值就是你想要的:
{3: {'a': 1}, 4: {'b': 2}}
逻辑解释:
zip(a, b)会把列表a的元素和字典b的键一一对应(遍历字典默认就是遍历键),得到配对(3, 'a')和(4, 'b')- 对于每一对
(num, key),我们创建一个新的小字典{key: b[key]},作为外层字典中num对应的取值
后续扁平化嵌套字典的方法
如果之后需要把这个嵌套字典扁平化,同样可以用字典推导式快速实现:
普通扁平化(假设内层键唯一):
flattened = {inner_key: inner_val for outer_val in c.values() for inner_key, inner_val in outer_val.items()}
结果是:{'a': 1, 'b': 2}
保留外层键信息(避免内层键重复冲突):
如果担心内层键有重复,可以把外层键也加入到扁平化后的键中:
flattened = {f"{outer_key}_{inner_key}": inner_val for outer_key, outer_val in c.items() for inner_key, inner_val in outer_val.items()}
结果是:{'3_a': 1, '4_b': 2}
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

