我有以下表格的数据(保存在列表中)
id, price, date, category
现在,我基本上想根据类别分开项目.. 基本上是一个字典,其中key是类别,其余的东西(id,price,data)是它的值 我已经创建了一个数据结构,所以让datastructre'item'具有上述四个属性(id,price,date,category) 基本上我想要的是以下形式的字典:
{1: [item_1,item_2....], 2:[item....]}
我该怎么做 由于单个键中有许多值,因此我知道它将使用defaultdict ..但我仍然无法解决这个问题。 感谢
答案 0 :(得分: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')]}
答案 1 :(得分:4)
我认为你想要这样的东西,假设你当前的数据存储在列表list_data
中:
dict_data = defaultdict(list)
for item in list_data:
dict_data[item.category].append(item)
如果每个项目都是元组而不是对象,请使用item[3]
代替item.category
。
答案 2 :(得分:2)
这样做的一种方法是使用字典,其中每个值都是项目列表(ID,价格,日期),密钥是类别。
以下内容,其中d
是字典,c
是一个类别,itm
是一个元组/项目:
def insert(d, c, itm):
if not c in d:
d[c] = [itm]
else:
d[c].append(itm)