如何将列表列表转换为可为每个对象(例如foo.bar.spam)调用的类?

清单清单:

information =[['BlueLake1','MO','North','98812'], ['BlueLake2','TX','West','65343'], ['BlueLake3','NY','sales','87645'],['RedLake1','NY','sales','58923'],['RedLake2','NY','sales','12644'],['RedLake3','KY','sales','32642']]

这将使用Flask中的jinja2模板为非常大的html表创建变量。

我希望能够做这样的事情:

{% for x in information %}
    <tr>
        <td>{{x.name}}</td>
        <td>Via: {{x.location}} | Loop: {{x.region}}</td>
        <td>{{x.idcode}}</td>
    </tr>
{% endfor %}


除了这个信息模板之外,还有其他用途,因此为什么我希望它成为可在其他地方使用的可调用类。

最佳答案

使用collections.namedtuple

>>> from collections import namedtuple
>>> Info = namedtuple('Info', ['name', 'location', 'region', 'idcode'])
>>>
>>> information =[
...     ['BlueLake1','MO','North','98812'],
...     ['BlueLake2','TX','West','65343'],
...     ['BlueLake3','NY','sales','87645'],
...     ['RedLake1','NY','sales','58923'],
...     ['RedLake2','NY','sales','12644'],
...     ['RedLake3','KY','sales','32642']
... ]
>>> [Info(*x) for x in information]
[Info(name='BlueLake1', location='MO', region='North', idcode='98812'),
 Info(name='BlueLake2', location='TX', region='West', idcode='65343'),
 Info(name='BlueLake3', location='NY', region='sales', idcode='87645'),
 Info(name='RedLake1', location='NY', region='sales', idcode='58923'),
 Info(name='RedLake2', location='NY', region='sales', idcode='12644'),
 Info(name='RedLake3', location='KY', region='sales', idcode='32642')]

08-05 18:55
查看更多