mysql 两元组的差值_比较两个元组列表

old = [('ver','1121'),('sign','89'),('address','A45'),('type','00')]

new = [('ver','1121'),('sign','89'),('type','01')]

我需要将new列表与基于元组的第一个元素的old列表进行比较,并显示任何元素new列表之间的差异,以便输出如下所示:Match : ver = 1121

Match : sign = 89

Mismatch : type = 01 (old : 00)

我可以得到下面列表理解的所有匹配元组,但无法超越它。my_list = [(a,b) for (a,b) in new for (c,d) in old if ((a==c) and (b==d))]

print( my_list)

请给我推荐一种方法。

编辑

很抱歉我的问题不清楚,我没有再提一件事,列表中的键可以重复,这意味着列表可以是:old = [('ver','1121'),('sign','89'),('address','A45'),('type','00'),('ver','sorry')]

new = [('ver','1121'),('sign','89'),('type','01'),('ver','sorry)]

更新

感谢@holdenweb,我对他的代码做了一些修改,这似乎提供了预期的输出,如果有任何缺陷,请提出建议。old = [('ver','1121'),('sign','89'),('address','A45'),('type','00'),('ver','works?')]

new = [('ver','1121'),('sign','89'),('type','01'),('ver','This')]

formatter = "{:12}: {:8} = {}".format

newfmter = "{} (old : {})".format

kv_old = []

for i,(kn, vn) in enumerate(new):

vo = [(j,(ko,vo)) for j,(ko, vo) in enumerate(old) if (ko==kn) ]

for idx,(key,val) in vo:

if idx >=i:

kv_old = [key,val]

break;

if kv_old[1]==vn:

print(formatter("Match", kv_old[0], kv_old[1]))

else:

print(formatter("Mismatch", kn, newfmter(vn, kv_old[1])))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值