国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

python 合并dict
阿神
阿神 2017-06-22 11:52:21
0
2
1162

現(xiàn)在有兩個(gè)dict,這個(gè)dict有兩層(如果可以自定義層數(shù)或者不限更好),想合并起來(lái)

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方法都是只能一層,不知道有沒(méi)有好的實(shí)現(xiàn)方法?

阿神
阿神

閉關(guān)修行中......

全部回復(fù)(2)
洪濤

隨手寫(xiě)了一個(gè) 應(yīng)對(duì)多層 dictionary 的 merge

from itertools import chain
from functools import reduce


def 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))

只測(cè)試了 python3.6.1 你只需要調(diào)用 deep_merge 就行了

寫(xiě)得比較 functional 不要怪我

代言

對(duì)于case2就比較簡(jiǎn)單:

>>> a={1:{"171": True}}
>>> b={1:{"171":False}}
>>> a.update(b)
>>> a
{1: {'171': False}}

對(duì)于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}}

你將上述操作封裝為函數(shù)即可。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板