python获取两个dict的不同

参数: dict1, dict2

需求:如果dict1和dict2中有不同的key,那么返回这个(key, dict1[key]);如果dict1和dict2中有相同的key,但是value不同,返回这个(key, dict1[key])

实现:

def dict_different_data(first, second):
    """
    get the different data bewtten two dicts objects
    return :result = first - second

    """
    assert isinstance(first, dict)
    assert isinstance(second, dict)
    different_data = {}
    update_key = set(first).intersection(set(second))
    insert_key = set(first).difference(set(second))
    delet_key =  set(second).difference(set(first))

    #updata data item which are both on first and second  and Not equal values
    for k in update_key:
        if(isinstance(first[k], dict)):
            result = dict_different_data(first[k], second[k])
            if len(result) > 0:
                different_data[k] = result
        elif first[k] != second[k]:
            different_data[k] = first[k]        
    #insert new item from first
    for k in insert_key:
        different_data[k] = first[k]
    #delet data 
    for k in delet_key :
        different_data[k] = None        

    return different_data

if __name__ == "__main__":
    dic1 = {
        'name': 'test',
        'score': 89
    }
    dic2 = {
        'name': 'test',
        'score': 29,
        'age': 23
    }
    result = dict_different_data(dic2, dic1)
    print result

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值