算法--20181109--合并两个字典

将字典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字典应用:

查找:

更新以及新增:

删除:

猜你喜欢

转载自blog.csdn.net/u014106644/article/details/83956697