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

查找:

更新以及新增:

删除:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值