2009-12-17 45 views
0

簡單的問題,我已經解決了..但python有一百萬種方法來解決同樣的問題。我不希望是最簡潔的解決方案,我只是想要一個更有意義比下面什麼是在Python中處理這個問題的更好方法

# sql query happens above, returns multiple rows 
rows = cursor.fetchall() 
cursor.close() 
cntdict = {} 
for row in rows: 
    a, b, c = row[0], row[1], row[2] 
    cntdict = { 
     a : { "b":b, "c":c } 
    } 
print dict(cntdict) 

備忘,始終是唯一的上方。我想從結果集中創建一個字典。稍後在我的腳本中,我需要引用字典中發生的每一行的值。我試圖通過使關鍵字來自var a的值來索引字典。這應該指向另一個帶有兩個以上鍵/值對的詞典,它們描述了一個......除非有一個更聰明/更短的方法來做到這一點。

回答

12

你可以做同樣的事情與發電機的表達和解釋構造:

dict((row[0], {"b": row[1], "c": row[2]}) for row in rows) 

這裏是在動作的代碼:

>>> rows = [[1, 2, 3], [4, 5, 6]] 
>>> dict((row[0], {"b": row[1], "c": row[2]}) for row in rows) 
{1: {'c': 3, 'b': 2}, 4: {'c': 6, 'b': 5}} 

我不記得,如果MySQLdb的返回行作爲元組列表,如果是這種情況,那麼你可以這樣做:

​​
+0

+1該死的,這很好 – 2009-12-17 01:11:01

+0

S /名單理解/發電機表達/ – 2009-12-17 01:13:57

+0

謝謝內德,糾正。 – 2009-12-17 01:17:26

-2

你可能想廁所k到使用ORM來抽象你的數據庫。我無法從這麼短的代碼片斷中找出結果,但是看起來好像你的數據可能在ORM中運行良好,無論如何你只是想建立一個代碼。

我最喜歡的三個奧姆斯:一個在Django(易於使用,效果最好的是常規數據),SQLAlchemy(如果你的數據庫有一個複雜的架構的最佳選擇),並Autumn(小而簡單,非常適合使用與SQLite)。

0

正如Nadia暗示的,元組擴展在處理查詢結果時非常方便。她的字典()表達式在這種情況下非常好的,但對於其他查詢時,你需要做的事情的結果不同的只是使用元組擴展的for循環:

for a, b, c in rows: 
    # do something 
相關問題