需求:当用户修改其资料时,需要把本次修改的内容列举出来。例如用户名由原来的“栓柱”改为“狗剩”,年龄由“20”改为18。当然用户属性有很多,代码里一个个属性去判断显然不太雅观。
接口方法中所有的参数都在一个字典里(newDataDict),也就是说newDataDict里包含了所有要更新的参数及其值。而用户数据在redis中,从redis中获取到数据最终能转换成一个类对象(比如叫userObj)。userObj对象是可以通过__dict__方法转换成一个字典的。
那么,这两个字典可以发生关系,然后得到我们想要的东西么?
答案是肯定的。
userObj是尚未修改的数据,转换成字典之后暂且叫做userDict,模拟数据如下:
# newDataDict 接口方法中收到的参数
newDataDict = {
'id':566,
'name':'狗剩',
'age':18,
'addr':'三里屯乡',
'phone':'15766666666',
'gender':'男'
}
# 数据库中已有的用户信息数据
userDict = {
'id':566,
'name':'狗蛋',
'age':20,
'addr':'牤牛屯乡',
'phone':'15766666666',
'gender':'男'
}
已知字典newDataDict和字典userDict,如何求userDict中被更新的元素的key?
先求出两个字典中共有的key的交集,再求出key:val的交集,前者再对后者取交集就得到了那些被修改了的key。
ret=set(newDataDict) &set(userDict) - \
set(dict(set(newDataDict.items()) &set(userDict.items())))
print(ret)
打印结果为:
{'age', 'name', 'addr'}
拿到本次会更新的参数名,再拿到修改前和修改后的数据,就很简单啦。
领取专属 10元无门槛券
私享最新 技术干货