2014-07-08 80 views
0

我有一個db查詢返回一個列表。然後我做了這樣的詞典理解:groupby迭代器不會添加到字典理解列表中

results = {product: [g for g in group] for product, group in groupby(db_results, lambda x: x.product_id)} 

問題是,字典的值只返回1值。我認爲這樣做是因爲該組是一個迭代器。

下返回組的每一個項目,所以我知道他們在那裏:

groups = groupby(db_results, lambda x: x.product_id) 
for k,g in groups: 
    if k==1001: 
     print list(g) 

我試圖獲得其關鍵列表在上面克所有值是關鍵字典。

我已經嘗試了許多變化,如:

blah = dict((k,list(v)) for k,v in groupby(db_results, key=lambda x: x.product_id)) 

,但我無法得到它的權利。

+0

什麼是'db_results'? –

+0

您能否提供一個可運行的示例,以顯示問題的示例數據? – BrenBarn

+1

'[g for g in group]'不是一個合理的列表理解,因爲你從一個簡單的'list(group)'中得到相同的結果。另外'如果k = 1001:'是'SyntaxError',所以你沒有向我們展示你的真實代碼。 –

回答

1

如果你堅持要用groupby,那麼你需要確保輸入排序BYT你組上,不過,我想我會建議你使用defaultdict而不是相同的密鑰:

from collections import defaultdict 
blah = defaultdict(list) 
for item in db_results: 
    blah[item.product_id].append(item)