2017-01-11 25 views
0

我添加的是從Flask sqlalchemy核心查詢的數據。所有數據的列都丟失了。所以我把它加回到下面的代碼中:有很多列,但我簡化爲幾個。Python:將列添加到字典中,但沒有按正確的順序映射

col = ['index','Stock','Name','MACD','STOCH','RSI'] 
a = call.fetchall() 
print a 
>>>a=[(0, 'MAGNUM', 'MAGNUM BERHAD', 'SS', 'S', 'H1'),(1,'ABC','ABC BH','SS','S','H2')]. 
dicts = [dict(zip(col, d)) for d in a] 
print dicts 
>>>[{'MACD': 'JAC', 'RSI': 'SS', 'STOCH': 'SB', 'Name': 'H',Stock':'H'}] 

該類型的字典輸出跳過第一個結果,這是索引0它繼續到索引1。此外,指數不映射到http://stardict.sourceforge.net/Dictionaries.php下載。 如何使它以正確的順序映射一切?

+0

字典不能維持秩序。 – furas

+0

你的意思是'[dict(a,b)a,b是zip(col,d)]'? – MYGz

+0

你* *實際上只是做'data = [行中的字典(行)]',但爲什麼呢?你可以通過'a'來做一些事情,比如'row.Stock'。 –

回答

3

你不能預先假定字典中的順序。

既然你改變了你的問題,我改變了我的答案。該a是元組的列表,以便以下將工作:

from collections import OrderedDict 
col = ['index','Stock','Name','MACD','STOCH','RSI'] 
a=[(0, 'MAGNUM', 'MAGNUM BERHAD', 'SS', 'S', 'H1'),(1,'ABC','ABC BH','SS','S','H2')] 

d = [OrderedDict(zip(col,t)) for t in a] 

print (d) 

它創建一個包含與元組的a列表中的每個元素荏苒的col列表內置OrderedDict元素的列表理解。

結果:

[OrderedDict([('index', 0), ('Stock', 'MAGNUM'), ('Name', 'MAGNUM BERHAD'), ('MACD', 'SS'), ('STOCH', 'S'), ('RSI', 'H1')]), OrderedDict([('index', 1), ('Stock', 'ABC'), ('Name', 'ABC BH'), ('MACD', 'SS'), ('STOCH', 'S'), ('RSI', 'H2')])] 
+0

它不起作用。 (1,'ABC','ABC BH','SS','S','','',' H2' )]'。抱歉混淆。我得到的輸出是OrderedDict([('index',0,'MAGNUM','MAGNUM BERHARD','SS'),('Stock','ABC','ABC BH','SS')]]) ' – vindex

+0

好的,你以後改變了數據。現在你的代碼是有道理的。看到我更新的答案。變化不大。 –

+0

@DanielLee這個問題已經改變了。也許是時候讓你取消刪除你的文章,因爲現在它回答了這個問題:) –

相關問題