2011-10-27 33 views
2

我有數據在下面的表格(保存在一個列表)多個值

id, price, date, category 

現在,我基本上要基於類別,以單獨的項目.. 基本上是一個字典,其中關鍵是類別和其餘的東西(ID,價格,數據)是它的值 我已經創建了一個數據結構,因此讓一個datastructre'item'具有上述四個屬性(ID,價格,日期,類別) 所以基本上是我要求是一個字典在以下形式:

{1: [item_1,item_2....], 2:[item....]} 

我該怎麼做.. 由於在一個關鍵字中有很多值,因此我知道它會使用defaultdict ..但我仍然無法解決這個問題。 感謝

+0

我不完全理解你的問題。爲什麼python字典不適合你? – llazzaro

回答

4

我想你想是這樣的,假設你的當前數據存儲在列表list_data

dict_data = defaultdict(list) 
for item in list_data: 
    dict_data[item.category].append(item) 

如果每個項目是一個元組,而不是一個對象,使用item[3]代替item.category

4
output = defaultdict(list) 
for item, cat in ((x[:-1], x[-1]) for x in data): 
    output[cat].append(item) 

,或者不defaultdict:

output = {} 
for item, cat in ((x[:-1], x[-1]) for x in data): 
    output.setdefault(cat, []).append(item) 

輸出示例:

>>> data = [ 
...  (1, 123, "somedate", "boy"), 
...  (3, 435, "anotherdate", "boy"), 
...  (23, 123, "moredate", "girl"), 
... ] 
>>> output = {} 
>>> for item, cat in ((x[:-1], x[-1]) for x in data): 
...  output.setdefault(cat, []).append(item) 
... 
>>> print output 
{'boy': [(1, 123, 'somedate'), (3, 435, 'anotherdate')], 'girl': [(23, 123, 'moredate')]} 
2

一種方式做到這一點是有一本字典,其中每個值是一個項目的列表(ID,價格,日期),關鍵是類別。

東西沿着以下,其中d是一本字典的線條,c是一個類別,itm是一個元組/項目:

def insert(d, c, itm): 
    if not c in d: 
    d[c] = [itm] 
    else: 
    d[c].append(itm)