如何将命名元组转换为元组?

4
如何做this的相反操作?
我有一个命名元组列表,是通过迭代pandas数据帧构建的:
list = []
for currRow in dataframe.itertuples():
    list.append(currRow)

如何将这个命名元组列表转换为元组列表?请注意,itertuples()返回的是命名元组。

4
命名元组本质上就是一个元组;namedtuple 函数返回的类型是 tuple 的子类,且命名元组的值可以在任何需要 tuple 值的地方使用。 - chepner
@chepner 将一个命名元组列表进行pickling会失败,但将一个元组列表进行pickling则可以:https://github.com/dask/dask/issues/1382。"在cloudpickle下,命名元组不可序列化"。 - PlsWork
1
很不幸,好像是一个bug。 T = namedtuple("T", "foo bar"); t = T(1,2); pickle.dumps(t) 的输出结果是 b'\x80\x03c__main__\nT\nq\x00K\x01K\x02\x86q\x01\x81q\x02.' - chepner
3个回答

9

你可以通过 tuple() 构造函数来实现:

>>> from collections import namedtuple

>>> foo = namedtuple('foo', ('bar', 'baz'))
>>> nt = foo(1,2)
>>> nt
foo(bar=1, baz=2)
>>> tuple(nt)
(1, 2)

2

首先,不要将变量命名为内置函数。

回答你的问题,你可以使用 tuple 构造函数;假设你的源 list 命名为 l

tuple(l)

"最初的回答"

l_tuples = [tuple(t) for t in l]

1
你可以这样做。只需使用namedtuple构造元组作为参数即可。
>>> X = namedtuple('X', 'y')
>>> x1 = X(1)
>>> x2 = X(2)
>>> x3 = X(3)
>>> x_list = [x1, x2, x3]
>>> x_tuples = [tuple(i) for i in x_list]
>>> x_tuples
[(1,), (2,), (3,)]
>>> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接