2011-10-27 12 views
2

私は(リストに保存された)形今複数の値

id, price, date, category 

次のデータは、私は基本的にカテゴリに基づいてアイテムを区切るしたいしている... キーが辞書(id、price、date、category) 私はすでにデータ構造を作成していますので、datastructre 'item'に上記の4つの属性(ID、価格、日付、カテゴリ)があります。 wantは次の形式の辞書です:

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

どうすればいいですか? 単一のキーには多くの値があるので、defaultdict ..を使用することはわかっていますが、これを回避することはできません。 おかげ

+0

私はあなたの問題を完全に理解していません。なぜpython dictがあなたにとってうまくいかないのですか? – 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)