1. 程式人生 > >演算法18--合併兩個字典

演算法18--合併兩個字典

將字典y合併到字典x中,若x中沒有y中的key則x執行新增操作,若x中已有對應key則執行更新操作

merge(dict x , dict y)

若y==none 則直接返回x即可

若x==none,則將x複製y返回

若y!=none and x!=none ,則取出x keys以及y keys  遍歷y的每一個key:

      若ykey在xkeys中不存在,則在x中新增相應ykey以及相應value

      若yKey在xkeys中存在:

                若ykey在x中對應value不是dict,則直接更新value=y中ykey對應值即可

                若ykey在x中對應value是dict,則遞迴呼叫 merge(dict  x[ykey], dict y[ykey])

程式碼如下:

def merge(x, y):
    #python中dict為引用傳遞
    #x==None 直接複製y返回
    if x==None:
        x = y
        return x
    #y==None 直接返回x即可    
    if y==None:
        return x
    #x,y都非空
    xkeys = list(x.keys())
    ykeys = list(y.keys())
    for yk in ykeys:
        #沒有則進行新增
        if yk not in xkeys:
            x[yk] = y[yk]
        #存在該key
        if yk in xkeys:
            #print (type(x[yk]).__name__)
            #該key對應value類性不為dict 則更新操作
            if type(x[yk]).__name__ != 'dict':
                x[yk] = y[yk]  
            #對應型別為dict則遞迴呼叫
            else:
                merge(x[yk], y[yk])
    return x

簡化如下:

def merge2(x, y):
    #python中dict為引用傳遞
    #x==None 直接複製y返回
    if x==None:
        x = y
        return x
    #y==None 直接返回x即可    
    if y==None:
        return x
    #x,y都非空
    xkeys = list(x.keys())
    ykeys = list(y.keys())
    for yk in ykeys:                      
        if yk in xkeys and type(x[yk]).__name__ == 'dict':
            merge(x[yk], y[yk])
        else:
            x[yk] = y[yk]
    return x

0.邊界條件的判斷:

1.python中函式引數傳遞問題:

list dict為可變型別,函式傳遞相當於指標傳遞會改變原來的值

2. python中資料型別判斷:

type(x[yk]).__name__ != 'dict'

3. python中dict字典應用:

查詢:

更新以及新增:

刪除: