【面试实战题】编码实现对比2个Python字典?
测试开发栈
共 3660字,需浏览 8分钟
· 2021-05-15
使用过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)
纸上得来终觉浅,得知此事要躬行,编码还是要多实践!
评论
【送书福利】《Java面试八股文:高频面试题与求职攻略一本通》
先来唠唠最近粉丝面试回来跟我聊天,基本上都提到一个点,在面试过程中八股文占比很高(八股文70%、项目20%、10%算法)除了一些搞算法突出的厂除外。其实现在很多厂八股都是逐渐深入的方式来问,所以大家在学习的过程中,针对一些重点的内容,最好深入去学习,不然还是比较难应对这种追问式的问题。最近刚好从一位
Java后端技术
0
Python列表知识应知应会
点击上方“Go语言进阶学习”,进行关注回复“Go语言”即可获赠从入门到进阶共10本电子书今日鸡汤只在此山中,云深不知处。一、前言 在Python程序开发中,列表(List)经常会使用。假设一个班里有50个学生现需要统计每一个学生的总成绩情况,如果不使用列
Go语言进阶学习
0
Python 字符串应该用双引号还是单引号?
转载来源:洪尔摩斯PyCharm升级至 2023.2版本后,经常弹出来一个提示问我要不要试一下Black formatter。试了一下,这个Black formatter 很有个性,特别喜欢换行。我的一个文件用PyCharm自带的代码整理器整理完之后是500行左右,然后再用Black整理就变成600
菜鸟学Python
0
delorean,一个超级实用的 Python 库!
作者通常周更,为了不错过更新,请点击上方“Python碎片”,“星标”公众号大家好,今天为大家分享一个超级实用的 Python 库 - delorean。Github地址:https://github.com/myusuf3/delorean/时间在计算机科学和软件开发中是一个至关重要的概念。Pyt
Python 碎片
0
【每周一课#06】MidJourney应用实战
#AI绘画# #MJ# #文生图#时间:4月24日周三 21:00课程大纲:1、关于AIGC:概念、发展历程、就业前景2、MJ基础认识:如何使用、底层逻辑、MJ与SD优缺点比较3、MJ基础功能介绍:任务指令、后缀参数、图生图、图生文、垫图、局部修改等4、MJ应用场景与变现方向
Python涨薪研究所
0
五一Python抢票神器来了
还在为五一回家抢不到火车票发愁吗?今天介绍一个Python抢票神器,希望对你有帮助。Py12306是一个流行的开源项目,旨在帮助用户更便捷地查询和预订中国铁路12306网站上的火车票。以下是使用Py12306的基本步骤和一些注意事项:安装与环境准备安装Python: 确保你的系统中安装了Python
Python小二
1
字节面试:如何解决MQ消息积压问题?
面试题大全:www.javacn.siteMQ(Message Queue)消息积压问题指的是在消息队列中累积了大量未处理的消息,导致消息队列中的消息积压严重,超出系统处理能力,影响系统性能和稳定性的现象。1.消息积压是哪个环节的问题?MQ 执行有三大阶段:消息生产阶段。消息存储阶段。消息消费阶段。
Java中文社群
0
PyPy为什么能让Python比C还快?一文了解内在机制
我的小册:(小白零基础用Python量化股票分析小册) ,原价299,限时特价2杯咖啡,满100人涨10元。来源:机器之心「如果想让代码运行得更快,您应该使用 PyPy。」—— Python 之父 Guido van Rossum对于研究人员来说,迅速把想法代码化并查看其是否行得通至关重要。Pyth
菜鸟学Python
0