【发布时间】:2012-08-23 02:26:58
【问题描述】:
我想在不丢失键名的情况下合并两个命名元组。如果,我只是与 '+' 运算符合并,我得到一个元组,但没有名称。
例如:
n [1]: from collections import namedtuple
In [2]: A = namedtuple("A", "a b c")
In [4]: B = namedtuple("B", "d e")
In [5]: a = A(10, 20, 30)
In [6]: b = B(40, 50)
In [7]: a + b
Out[7]: (10, 20, 30, 40, 50)
正如您在上面的例子中看到的,a + b 的结果没有与之关联的名称。
但是,我可以通过创建第三个命名元组来实现它,它具有来自 A 和 B 的字段。
In [8]: C = namedtuple("C", A._fields + B._fields)
In [9]: C(*(a + b))
Out[9]: C(a=10, b=20, c=30, d=40, e=50)
这是正确的方法还是有更好的方法?
【问题讨论】:
-
您可以使用字典和
.update()方法或{ k:v for d in (a,b) for k,v in d.items() }技巧。namedtuple是关于定义一组固定的属性,你似乎违反了。 -
一个更好的问题是你为什么需要这个。
-
@delnan 我需要这个,因为我正在尝试加入两个命名元组列表。我想这是一个相当正常的用例。
-
@Senthil:不,这不是一个正常的用例。通常,您使用
namedtuple构造函数定义一些“类型”,然后创建它的实例。这有点像 C 语言中的struct。我认为你想使用字典
标签: python namedtuple