我在python中有一个命名元组类
class Town(collections.namedtuple('Town', [
'name',
'population',
'coordinates',
'population',
'capital',
'state_bird'])):
# ...
我想把城镇实例转换成字典。我不想把它和一个镇上的田地的名称或数量绑在一起。
有没有一种方法可以让我添加更多的字段,或者传入一个完全不同的命名元组并得到一个字典。
我不能在其他人的代码中更改原始类定义。所以我需要以一个城镇为例,把它转换成一本字典。
在} 。
namedtuple
实例上有一个内置的方法,这个^{正如评论中所讨论的,在某些版本上,
vars()
也会这样做,但它显然高度依赖于构建细节,而_asdict
应该是可靠的。在某些版本中,_asdict
被标记为已弃用,但注释表明,从3.4开始不再是这种情况。在Ubuntu 14.04lts版本的python2.7和python3.4上,
__dict__
属性按预期工作。_asdict
方法也可以工作,但是我倾向于使用标准定义的、统一的属性api,而不是本地化的非统一api。$python2.7美元
看到asdict是获得表示soemthing的字典的语义方法(至少据我所知)。
如果能积累一个包含主要python版本和平台及其对
__dict__
的支持的表,那就太好了,目前我只有一个平台版本和两个python版本,如上面所述。TL;DR:为此提供了一个方法
_asdict
。下面是用法演示:
这是一个documented method的namedtuples,也就是说,与python中通常的约定不同,方法名的前导下划线并不妨碍使用。除了添加到namedtuples、
_make
、_replace
、_source
、_fields
的其他方法之外,它还有下划线,只是为了尝试并防止与可能的字段名冲突。注意:对于一些2.7.5<;python版本<;3.5.0的代码,您可能会看到这个版本:
有一段时间,文档中提到
_asdict
已经过时(参见here),并建议使用内置方法vars。这个建议现在已经过时了;为了修复与子类化相关的a bug,namedtuples上存在的__dict__
属性再次被this commit删除。相关问题 更多 >
编程相关推荐