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



我有两个元组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'))

(应保留顺序)

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

有没有办法执行此操作?

由于不能缺少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)

结果:

[(2, 'BC', 'XY'), (3, 'CD', 'ZA')]

该解决方案的优点是几乎 1 行,快速(因为字典查找)并保持顺序。

if b.get(k,v) != v条件可防止a有一个元组,其数字不在字典b。在这种情况下,默认值 get 返回 v 并且条件False

如果保证列表在元组中具有相同的数字顺序,则可以执行以下操作:

[ai + (bi[1],) for ai, bi in zip(a, b) if ai != bi]

如果订单没有保证,您可以执行以下操作:

[ai + (bi[1],) for ai, bi in zip(sorted(a), sorted(b)) if ai != bi]

相关内容

  • 没有找到相关文章

最新更新