【面试实战题】编码实现对比2个Python字典?

测试开发栈

共 3660字,需浏览 8分钟

 ·

2021-05-15 16:04

使用过Python的同学相信肯定对使用高频的数据结构字典dict不会陌生,实际编码中也可能遇到这样的需求,需要对2个或多个dict做合并或者对比差异,今天就用这么一道面试题来手写Python的dict对比:

'''
    对比两个 dict
    :param dict1:
    :param dict2:
    :return: dict1 所独有的键值对, dict2 所独有的键值对, 2个dict的差异合并
'''

def diffDicts(dict1, dict2):
    if isinstance(dict1, dict) and isinstance(dict2, dict):
        diff_data = {}
        only_dict1_has = {}
        only_dict2_has = {}
        d2_keys = list(dict2.keys())
        for d1k in dict1.keys():
            if d1k in d2_keys:  # d1,d2都有。去往深层比对
                d2_keys.remove(d1k)
                temp_only_dict1_has, temp_only_dict2_has, temp_diff_data = diffDicts(dict1.get(d1k), dict2.get(d1k))
                if temp_only_dict1_has:
                    only_dict1_has[d1k] = temp_only_dict1_has
                if temp_only_dict2_has:
                    only_dict2_has[d1k] = temp_only_dict2_has
                if temp_diff_data:
                    diff_data[d1k] = temp_diff_data
            else:
                only_dict1_has[d1k] = dict1.get(d1k)  # d1有d2没有的key
        for d2k in d2_keys:  # d2有d1没有的key
            only_dict2_has[d2k] = dict2.get(d2k)
        return only_dict1_has, only_dict2_has, diff_data
    else:
        if dict1 == dict2:
            return NoneNoneNone
        else:
            return NoneNone, [dict1, dict2]

实现起来并不算太复杂,但涉及了dict的遍历,函数多返回值、递归等知识点。

调用方式很简单,返回2个dict的差异部分以及相同部分:

dict1_only, dict2_only, result = diffDicts(dict1, dict2)


纸上得来终觉浅,得知此事要躬行,编码还是要多实践!


测试开发栈

软件测试开发合并必将是趋势,不懂开发的测试、不懂测试的开发都将可能被逐渐替代,因此前瞻的技术储备和知识积累是我们以后在职场和行业脱颖而出的法宝,期望我们的经验和技术分享能让你每天都成长和进步,早日成为测试开发栈上的技术大牛~~


长按二维码/微信扫描关注


欢迎加入QQ群交流和提问:427020613

互联网测试开发一站式全栈分享平台


浏览 8
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报