Python 如何从列表列表中生成有序词典?

Python 如何从列表列表中生成有序词典?,python,list,dictionary,python-2.7,ordereddictionary,Python,List,Dictionary,Python 2.7,Ordereddictionary,问题是: 拥有一个名称列表和一个列表列表,如何创建一个列表,其中每个项目都是一个有序的字典,名称作为键,列表中的项目作为值?下面的代码可能更清楚: from collections import OrderedDict list_of_lists = [ ['20010103', '0.9507', '0.9569', '0.9262', '0.9271'], ['20010104', '0.9271', '0.9515', '0

问题是: 拥有一个名称列表和一个列表列表,如何创建一个列表,其中每个项目都是一个有序的字典,名称作为键,列表中的项目作为值?下面的代码可能更清楚:

from collections import OrderedDict

list_of_lists = [
                ['20010103', '0.9507', '0.9569', '0.9262', '0.9271'],
                ['20010104', '0.9271', '0.9515', '0.9269', '0.9507'],
                ['20010105', '0.9507', '0.9591', '0.9464', '0.9575'],
                ]

names = ['date', 'open', 'high', 'low', 'close']
我想得到:

ordered_dictionary = [
                     OrderedDict([('date', '20010103'), ('open', '0.9507'), ('high', '0.9569'), ('low', '0.9262'), ('close', '0.9271')]),
                     OrderedDict([('date', '20010104'), ('open', '0.9271'), ('high', '0.9515'), ('low', '0.9269'), ('close', '0.9507')]),
                     OrderedDict([('date', '20010105'), ('open', '0.9507'), ('high', '0.9591'), ('low', '0.9464'), ('close', '0.9575')]),
                     ]
用于组合名称和值。通过列表理解:

from collections import OrderedDict

ordered_dictionary = [OrderedDict(zip(names, subl)) for subl in list_of_lists]
其中:

>>> from pprint import pprint
>>> pprint([OrderedDict(zip(names, subl)) for subl in list_of_lists])
[OrderedDict([('date', '20010103'), ('open', '0.9507'), ('high', '0.9569'), ('low', '0.9262'), ('close', '0.9271')]),
 OrderedDict([('date', '20010104'), ('open', '0.9271'), ('high', '0.9515'), ('low', '0.9269'), ('close', '0.9507')]),
 OrderedDict([('date', '20010105'), ('open', '0.9507'), ('high', '0.9591'), ('low', '0.9464'), ('close', '0.9575')])]

我知道这个问题已经很老了,但我想我应该推荐一个名为“双工”的
解决方案,作为OrderedICT的替代方案,在这种情况下可以很好地工作:

from collections import namedtuple

Bar = namedtuple('Bar', ['date', 'open', 'high', 'low', 'close'])

bars = [Bar(date, o, h, l, c) for date, o, h, l, c in list_of_lists]

>>> bars
[Bar(date='20010103', open='0.9507', high='0.9569', low='0.9262', close='0.9271'),
 Bar(date='20010104', open='0.9271', high='0.9515', low='0.9269', close='0.9507'),
 Bar(date='20010105', open='0.9507', high='0.9591', low='0.9464', close='0.9575')]

>>> bars[2].date
'20010105'

>>> bars[2].close
'0.9575'
更好的是,可以使用字典理解,以日期为关键:

Bar = namedtuple('Bar', ['open', 'high', 'low', 'close'])

bars = {date: Bar(o, h, l, c) for date, o, h, l, c in list_of_lists}

>>> bars
{'20010103': Bar(open='0.9507', high='0.9569', low='0.9262', close='0.9271'),
 '20010104': Bar(open='0.9271', high='0.9515', low='0.9269', close='0.9507'),
 '20010105': Bar(open='0.9507', high='0.9591', low='0.9464', close='0.9575')}

>>> bars['20010105']
Bar(open='0.9507', high='0.9591', low='0.9464', close='0.9575')

>>> bars['20010105'].close
'0.9575'

非常感谢。清晰优雅的解决方案!