查找元组中的不匹配并在Python中合并它们

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)

(订单应保留)

我可以抓住的最接近的参考是比较子列表并合并它们,但这是用于列表,我找不到使用元组的方法.

有没有办法可以执行此操作?

Jea*_*bre 5

由于不能丢失"键" ab(或那些值应该被忽略),我会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