python set union操作与命名元组的表现不佳

我想在
python中创建一组namedtuple,能够使用union操作动态添加元素.

以下代码片段创建了一组namedtuple,其行为很好.

from collections import namedtuple

B = namedtuple('B', 'name x')

b1 = B('b1',90)
b2 = B('b2',92)
s = set([b1,b2])
print(s)

打印

{B(name='b1', x=90), B(name='b2', x=92)}

现在,如果我创建另一个namedtuple并使用union操作将其添加到我的set中,它就不会按预期运行.

b3 = B('b3',93)
s = s.union(b3)
print(s)

代码段打印以下输出.

{93, B(name='b1', x=90), B(name='b2', x=92), 'b3'}

预期产量应为:

{B(name='b1', x=90), B(name='b2', x=92), B(name='b3', x=93)}

我误解了API吗?
python2和3都显示相同的行为.

最佳答案 union期望一个set(或一个列表或另一个iterable),但你传递一个名为tuple,它本身是一个可迭代的,但是它提供了值,所以你将这个值与值合并.试试这个:

s = s.union({b3})
点赞