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. 我在導入模板資源時遇到無法顯示的問題,請老師解答下2. macos - 無法source activate python273. 運行python程序時出現“應用程序發生異常”的內存錯誤?4. thinkphp6使用驗證器 信息如何輸出到前端頁面5. PHPExcel表格導入數據庫怎么導入6. css - 移動端 盒子內加overflow-y:scroll后 字體會變大7. javascript - h5微信中怎么禁止橫屏8. python - sqlalchemy更新數據報錯9. html - 網頁的a標簽到底要不要寫上域名?10. html5 - 前端面試碰到了一個緩存數據的問題,來論壇上請教一下

網公網安備