2013-03-13 22 views
5

Sorun şu ki: Bir liste listesi, liste listesi, liste oluşturma, her öğenin anahtar olarak isimleri içeren bir sıralı sözlük ve liste listesindeki öğeler değer olarak mı? Aşağıda koddan daha net olabilir:Listelerden sözlükler nasıl sıralanır?

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

ben almak istiyorum:

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

cevap

10

Kullanım zip() adları ve değerleri birleştirmek.

from collections import OrderedDict 

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

verir: Bir liste anlayışı ile

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

Teşekkür ederiz! Açık ve zarif bir çözüm! – atman

0

Ben bu soruyu çok eski olduğunu biliyorum ama ben iyi sonuç verecektir OrderedDict alternatif olarak bir namedtuple çözüm önermek düşündüm Bu durum:

012:

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' 

daha da iyisi, bir anahtar olarak tarihle sözlük anlama kullanabilirsiniz

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'