python 合并dict
问题描述
现在有两个dict,这个dict有两层(如果可以自定义层数或者不限更好),想合并起来
case1:输入:a: {1:{'171': True}} b:{1:{'172': False}}输出:{1:{'171': True, '172': False}}
case2:输入:a: {1:{'171': True}} b:{1:{'171': False}}输出:{1:{'171': False}}
我使用python的dict.update方法都是只能一层,不知道有没有好的实现方法?
问题解答
回答1:随手写了一个 应对多层 dictionary 的 merge
from itertools import chainfrom functools import reducedef deep_merge_func(acc, item): if not acc:acc = {} k, v = item if isinstance(v, dict):original_v = acc.get(k)if original_v and isinstance(original_v, dict): return {**acc, k: deep_merge(original_v, v)} return {**acc, k: v}def deep_merge(origin, target): return reduce(deep_merge_func, chain(origin.items(), target.items()), None)a = {1: {'171': True}}b = {1: {'171': False}}print(deep_merge(a, b))c = {1: {'171': True}}d = {1: {'172': False}}print(deep_merge(c ,d))
只测试了 python3.6.1 你只需要调用 deep_merge 就行了
写得比较 functional 不要怪我
回答2:对于case2就比较简单:
>>> a={1:{'171': True}}>>> b={1:{'171':False}}>>> a.update(b)>>> a{1: {’171’: False}}
对于case1可以这样操作:
>>> c={}>>> for k,v in a.items():... if k in b:... v.update(b[k])... c[k] = v... >>> c{1: {’172’: False, ’171’: True}}
你将上述操作封装为函数即可。
相关文章:
1. python - Django ManyToManyField 字段数据在 admin后台 显示不正确,这是怎么回事?2. 为什么span的color非要内联样式才起作用?3. mysql sum去除重复4. 老师无限级分类有点难哟 不好理解5. javascript - swiper.js嵌套了swiper 初始设置不能向下一个滑动 结束后重新初始6. docker gitlab 如何git clone?7. 请问没有对以太网通信进行封装的python库?8. python - pysciter 如何配置运行环境?9. javascript - webpack 怎么在压缩时候删除换行10. python - 如何修改twisted自带的日志输出格式?

网公网安备