【面试实战题】编码实现对比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 None, None, None
else:
return None, None, [dict1, dict2]
实现起来并不算太复杂,但涉及了dict的遍历,函数多返回值、递归等知识点。
调用方式很简单,返回2个dict的差异部分以及相同部分:
dict1_only, dict2_only, result = diffDicts(dict1, dict2)
纸上得来终觉浅,得知此事要躬行,编码还是要多实践!
评论