Python 3 namedtuple子类中的_asdict返回空字典

Oin*_*Oin 3 python namedtuple python-3.x

如何使用_asdictPython 3的子类namedtuple

这是我尝试过的:

class A(namedtuple('B', 'c')):
    pass

a = A(3)

a._asdict()
{}
Run Code Online (Sandbox Code Playgroud)

这在Python 2中可以正常工作并返回:

OrderedDict([('c', 3)])
Run Code Online (Sandbox Code Playgroud)

Jim*_*ard 5

如我所知,此行为在“ 问题24931”中被列为错误,并已得到修复。版本中存在正确的行为3.5.2(Python 2.x不受此影响。)

使用我当前的Python(3.5.2)版本,可以按预期执行:

class A(namedtuple('B', 'c')): 
    pass

A(3)._asdict()
Out[7]: OrderedDict([('c', 3)])
Run Code Online (Sandbox Code Playgroud)

因此,简而言之,要么考虑进行更新,3.5.1+要么(如果不能)实现_asdict自己。在问题跟踪器上的一条消息中对此进行了说明,这似乎是一个可行的选择:

from collections import namedtuple, OrderedDict

class A(namedtuple('B', 'c')):
    def _asdict(self):
        return OrderedDict(zip(self._fields, self))
Run Code Online (Sandbox Code Playgroud)

表现您所需。