Convert a namedtuple into a dictionary

后端 未结 6 1963
醉酒成梦
醉酒成梦 2020-12-04 18:36

I have a named tuple class in python

class Town(collections.namedtuple(\'Town\', [
    \'name\', 
    \'population\',
    \'coordinates\',
    \'population\         


        
6条回答
  •  忘掉有多难
    2020-12-04 19:07

    TL;DR: there's a method _asdict provided for this.

    Here is a demonstration of the usage:

    >>> 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')])
    

    This is a documented method of namedtuples, i.e. unlike the usual convention in python the leading underscore on the method name isn't there to discourage use. Along with the other methods added to namedtuples, _make, _replace, _source, _fields, it has the underscore only to try and prevent conflicts with possible field names.


    Note: For some 2.7.5 < python version < 3.5.0 code out in the wild, you might see this version:

    >>> vars(funkytown)
    OrderedDict([('name', 'funky'),
                 ('population', 300),
                 ('coordinates', 'somewhere'),
                 ('capital', 'lipps'),
                 ('state_bird', 'chicken')])
    

    For a while the documentation had mentioned that _asdict was obsolete (see here), and suggested to use the built-in method vars. That advice is now outdated; in order to fix a bug related to subclassing, the __dict__ property which was present on namedtuples has again been removed by this commit.

提交回复
热议问题