我有两套:
set_A = ([('6',90), ('4',315), ('2', 135)])
和
set_B = (['A',90), ('B', 135), ('D', 240)])
我正在寻找一种方法来解决两者之间的差异,而不考虑单个数字和单个大写字母。
预期输出:([('4',315)])
这两次迭代都给了我:(['A',90), ('B', 135), ('D', 240)])
different = [item for item in set_B if item not in set_A]
different = set_B.difference(set_A)
我需要跟踪大写字母和单个数字。我不知道该怎么做。
有办法做到这一点吗?
答案 0 :(得分:2)
我认为这就是你所追求的,如果不是,请澄清你的要求:
diff = set(a_item for a_item in set_A if a_item[1] not in [b_item[1] for b_item in set_B])
答案 1 :(得分:1)
您可以将它们转换为字典,因为字典键上的set.difference
非常便宜:
>>> # Inverted dictionaries because you want to match the second element
>>> dict_A = {key: value for value, key in set_A}
>>> dict_B = {key: value for value, key in set_B}
>>> [(dict_A[key], key) for key in set(dict_A).difference(dict_B)]
[('4', 315)]
最后一步是你想要的差异,但它也将它转换回元组列表。
答案 2 :(得分:1)
你几乎是对的,假设我们只需要检查每个元组的第二个元素的重复,你可以简单地做:
对于Set A - Set B
different = [item for item in set_A if item[1] not in zip(*set_B)[1]]
different
[('4', 315)]
对于B组 - 设置A
different = [item for item in set_B if item[1] not in zip(*set_A)[1]]
different
[('D', 240)]
希望这有帮助!