Python:元组集合的并集

时间:2018-09-20 16:23:07

标签: python python-3.x

比方说我们有两套:

T. Okai

我希望在第一个元素上产生并集

t = {('b', 3), ('a', 2)}
r = {('b', 4), ('c', 6)}

如果两个位置都有重复的符号(上面的示例为“ b”),则应保留第一个列表的元素。 谢谢。

6 个答案:

答案 0 :(得分:6)

只需:

t = {('b', 3), ('a', 2)}
r = {('b', 4), ('c', 6)}
d = dict(r)
d.update(t)
u = set(d.items())
print(u)

输出:

{('c', 6), ('a', 2), ('b', 3)}

答案 1 :(得分:2)

短一点的版本:

s = dict((*r, *t))
set(s.items())

输出:

{('a', 2), ('b', 3), ('c', 6)}

答案 2 :(得分:1)

for el in r:
    if not el[0] in [x[0] for x in t]:
        t.add(el)

t 

{('a', 2), ('b', 3), ('c', 6)}

答案 3 :(得分:0)

设置相交无法做到这一点。两个对象相等或不相等。由于您的对象是元组,cardImage.Image = UIImage(b, 3)不相等,因此您无法更改它。

最明显的方法是创建自己的类并重新定义相等性,例如

(b, 4)

并创建此类对象集。

答案 4 :(得分:0)

这是我基于理解的一线式解决方案:

t = {('b', 3), ('a', 2)}
r = {('b', 4), ('c', 6)}

result = {*t, *{i for i in r if i[0] not in {j[0] for j in t}}}

print(result)  # {('b', 3), ('a', 2), ('c', 6)}

使用转换为字典来消除重复项,您也可以这样做,这是非常聪明的解决方案,恕我直言:

t = {('b', 3), ('a', 2)}
r = {('b', 4), ('c', 6)}

result = {(k,v) for k,v in dict((*r,*t)).items()}

print(result)  # {('b', 3), ('a', 2), ('c', 6)}

答案 5 :(得分:0)

使用chain的替代方法:

from itertools import chain

t = {('b', 3), ('a', 2)}
r = {('b', 4), ('c', 6)}

result = set({k: v for k, v in chain(r, t)}.items())

输出

{('b', 3), ('a', 2), ('c', 6)}