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)
如我所知,此行为在“ 问题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)
表现您所需。