2014-01-30 23 views
0

現在,我想弄清楚一種使用SQLITE數據庫自動創建以下字典的方法。在Python中爲SQLITE中的每個鍵創建一個包含多個值的字典

produce = {1:[2,4], 2:[1,2,3], 3:[2,3,4]} 

關鍵是一個工廠,其附加的價值是產品,這個工廠能夠生產。即1:[2,4] - >工廠之一可以生產產品2和4.

在我的SQLITE數據庫中,我有一個包含四個字段的表:idfactory [INT],idproduct [INT],production [BOOL ]。我然後用下面的代碼來獲得相關數據集:

cur.execute('SELECT idfactory,idproduct FROM production WHERE production=1') 
result = cur.fetchall() 

然後我的想法是,使用循環來填補我的字典裏,像這樣的東西:

for idfactory,idproduct in result: 
    p[idfactory] = idproduct 

然而,這代碼會產生錯誤,並且也會有問題,因爲我的數據庫中沒有唯一的KEY。

我不太確定我的解釋是否足夠,但任何幫助將非常感謝!

+1

可能是這嗎? 'id for id,prod in result:p.setdefault(id,[])。append(prod)' – mshsayem

+0

在嘗試迭代它之前檢查'result'是否爲空。 – michaelmeyer

回答

0

setdefault方法dict可能有所幫助。 試試這個:

p = {} 

for idfactory, idproduct in result: 
    p.setdefault(idfactory, []).append(idproduct) 
+0

非常感謝,完成了這項工作!我將查看setdefault選項。 – user3222343

0

defaultdictis faster比使用setdefault,在我看來,執行相同的動作更清潔的方式。如果您想爲所有未知鍵的查找假設一個空列表,請考慮使用此列表。

from collections import defaultdict 

p = defaultdict(list) 
for idfactory, idproduct in result: 
    p[idfactory].append(idproduct) 
+0

非常感謝您的評論!我也會研究你的建議。你會說什麼當使用defaultdict over .setdefault時的實際影響? – user3222343

相關問題