2013-03-12 94 views
4

我使用mysqldb連接到mysql數據庫,並在另一個變量和數據/行中獲取元數據/列。現在我必須將列表和元組合成一個字典並保存順序。我知道這些字典是無序的,但有沒有其他辦法呢?將兩個列表合併爲一個字典時保留排序

cursor.description = ['userid', 'cid', 'mid', 'did', 'msid'] 
data = (29L, 35L, None, '', None) 

result = {} 
for i in data: 
    result.update = dict(zip(cols, i)) 

預期結果

result = {'userid': 29L, 'cid': 35L, 'mid': None, 'did': '', 'msid': None} 
+0

「我知道這類型的字典是無序的......」你希望有什麼問題通過創建來解決' dict'? – 2013-03-12 21:57:50

+0

請注意,您可以通過自定義的'Cursor'獲得'dict':http://geert.vanderkelen.org/fetching-rows-as-dictionaries-with-mysql-connectorpython/。您可以將它與'OrderedDict'結合使用,以從'.fetch'操作和光標迭代獲得有序的字典。 – nneonneo 2013-03-12 22:00:43

回答

8

使用一個OrderedDict

from collections import OrderedDict 

result = OrderedDict(zip(cursor.description, data)) 

實施例:

>>> from collections import OrderedDict 
>>> cols = ['userid', 'cid', 'mid', 'did', 'msid'] 
>>> data = (29L, 35L, None, '', None) 
>>> result = OrderedDict(zip(cols, data)) 
>>> result 
OrderedDict([('userid', 29L), ('cid', 35L), ('mid', None), ('did', ''), ('msid', None)]) 
>>> result['userid'] 
29L 
>>> result['cid'] 
35L 
>>> list(result) 
['userid', 'cid', 'mid', 'did', 'msid'] 
+1

對於2.7以上版本的Python,您需要安裝它。 'pip install ordereddict' – 2013-03-12 22:38:25

+0

我該如何製作結果字典? '['('userid',32L),('cid',40L),('mid',None),('did',''),('msid',None)]]' – ronak 2013-03-12 23:02:28

+1

'result '*是*字典('OrderedDict'是'dict'的子類)。它也是有序的,不像普通的'dict'。例如,你可以訪問'result ['userid']',基本上把它當作'dict'來對待。 – nneonneo 2013-03-12 23:04:18

1

忘記字典

>>> cols=['userid', 'cid', 'mid', 'did', 'msid'] 
>>> data = (29L, 35L, None, '', None) 
>>> zip(cols,data) 
[('userid', 29L), ('cid', 35L), ('mid', None), ('did', ''), ('msid', None)] 

如果你有很多的結果集,然後建立一個數組第一和append

>>> myarray.append(zip(cols,data)) 
+1

好,但它使尋找一個特定的列繁瑣。也許我只想寫'row ['userid']'。 – nneonneo 2013-03-12 22:02:59