Nag*_*han 2 python compare tuples
我有两个元组a = ((1, 'AB'), (2, 'BC'), (3, 'CD'))
和b = ((1, 'AB'), (2, 'XY'), (3, 'ZA'))
.通过分析这两个元组,可以发现元组中存在不匹配,即(2, 'BC')
存在a
但 (2, 'XY')
存在于元组中b
.
我需要找出这样的不匹配,并带有一个值为的元组
result = ((2, 'BC', 'XY'), (3, 'CD', 'ZA'))
Run Code Online (Sandbox Code Playgroud)
(订单应保留)
我可以抓住的最接近的参考是比较子列表并合并它们,但这是用于列表,我找不到使用元组的方法.
有没有办法可以执行此操作?
由于不能丢失"键" a
或b
(或那些值应该被忽略),我会b
变成一个字典,然后循环a
并比较值.
a = ((1, 'AB'), (2, 'BC'), (3, 'CD'))
b = ((1, 'AB'), (2, 'XY'), (3, 'ZA'))
b = dict(b)
mismatches = [(k,v,b[k]) for k,v in a if b.get(k,v) != v]
print(mismatches)
Run Code Online (Sandbox Code Playgroud)
结果:
[(2, 'BC', 'XY'), (3, 'CD', 'ZA')]
Run Code Online (Sandbox Code Playgroud)
该解决方案的优点是几乎一行,快速(因为dict查找)并保留顺序.
的if b.get(k,v) != v
条件保障对a
具有与号码不是在一个元组b
的字典.在这种情况下,get
退货的默认值v
和条件是False