我想在
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})