合并n级多维字典:使用字典推导式合并二级字典值的问题
解决嵌套字典合并的问题
嘿,我来帮你搞定这个字典合并的问题!
你遇到的NameError是因为循环顺序搞反了——在你的推导式里,你先尝试遍历tmp.items(),但这时候tmp还没被定义呢!Python处理字典推导式里的循环是按从左到右的顺序来的,得先拿到每个二级字典,再去拆解它的键值对。
正确的字典推导式方案
直接调整循环顺序就可以解决:
foo = {1: {'f1': 'c1'}, 2: {'f2': 'c2'}} bar = {k: v for tmp_dict in foo.values() for k, v in tmp_dict.items()} print(bar) # 输出: {'f1': 'c1', 'f2': 'c2'}
这里的逻辑是:
- 先遍历
foo.values(),拿到每一个二级字典(比如{'f1': 'c1'}和{'f2': 'c2'}) - 再遍历每个二级字典的键值对,把它们逐一添加到新字典
bar里
另一种更直观的非推导式方法
如果觉得推导式有点绕,用普通的循环+update()方法也很简单:
bar = {} for sub_dict in foo.values(): bar.update(sub_dict)
update()方法会直接把一个字典的键值对合并到另一个字典里,效果和推导式完全一样。
⚠️ 注意:如果你的二级字典里有重复的键,后面的键值会覆盖前面的(这是字典的默认特性,不管用哪种方法都会这样)。
内容的提问来源于stack exchange,提问作者Dusan Gligoric
相关产品推荐
相关产品推荐

