Wit*_*eso 126 python dictionary tuples namedtuple
我在python中有一个名为tuple的类
class Town(collections.namedtuple('Town', [
'name',
'population',
'coordinates',
'population',
'capital',
'state_bird'])):
# ...
Run Code Online (Sandbox Code Playgroud)
我想做的是将其变成字典.我承认python不是我强大的语言之一.关键是我不希望它与我所拥有的字段的名称或数字紧密相关.
有没有办法写它,以便我可以添加更多的字段,或传递一个完全不同的命名元组并获取字典.
编辑:我不能改变原来的类定义,因为它在别人的代码中.所以我需要一个城镇的实例并将其转换为字典.
wim*_*wim 227
TL; DR:_asdict
为此提供了一种方法.
以下是用法演示:
>>> fields = ['name', 'population', 'coordinates', 'capital', 'state_bird']
>>> Town = collections.namedtuple('Town', fields)
>>> funkytown = Town('funky', 300, 'somewhere', 'lipps', 'chicken')
>>> funkytown._asdict()
OrderedDict([('name', 'funky'),
('population', 300),
('coordinates', 'somewhere'),
('capital', 'lipps'),
('state_bird', 'chicken')])
Run Code Online (Sandbox Code Playgroud)
这是一个有记录的命名元组的方法,即与python中的通常约定不同,方法名称的前导下划线不能阻止使用.随着加入namedtuples其他方法,_make
,_replace
,_source
,_fields
,它有下划线只尝试和防止可能的字段名的冲突.
注意: 对于一些2.7.5 <python version <3.5.0代码,你可能会看到这个版本:
>>> vars(funkytown)
OrderedDict([('name', 'funky'),
('population', 300),
('coordinates', 'somewhere'),
('capital', 'lipps'),
('state_bird', 'chicken')])
Run Code Online (Sandbox Code Playgroud)
有一段时间文档提到_asdict
过时(见这里),并建议使用内置方法变量.这个建议现在已经过时了; 为了修复与子类相关的错误__dict__
,此提交再次删除了namedtuples上存在的属性.
通常_asdict()
返回一个OrderedDict
. 这是如何从转换OrderedDict
为常规dict
town = Town('funky', 300, 'somewhere', 'lipps', 'chicken')
dict(town._asdict())
Run Code Online (Sandbox Code Playgroud)
输出将是
{'capital': 'lipps',
'coordinates': 'somewhere',
'name': 'funky',
'population': 300,
'state_bird': 'chicken'}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
62933 次 |
最近记录: |