How to make an ordered dictionary from a list of lists?

The problem is this: Having a list of names and a list of lists, how to create a list in which each element is an ordered dictionary with names in the form of keys and elements from the list of lists as values? This may be more clear from the code below:

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

I would like to get:

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')]),
                     ]
+5
source share
2 answers

Use zip()to combine names and values. With a list:

from collections import OrderedDict

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

which gives:

>>> 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')])]
+10
source

I know this question is very old, but I thought I was proposing a solution namedtupleas an alternative to OrderedDict, which would work well in this situation:

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'
0

All Articles