我的数据是python词典列表,每个词典代表数据中的一行,并希望将其中的几个组合成一个字典。
我需要通过单个列中的公共值来组合它们,请注意要合并的字典可能包含也可能不包含类似的列,值应该连接在一起,而不是被破坏。
这是一个例子(在'a'列中按值组合dicts):
data = [{ 'a':0, 'b':10, 'c':20 }
{ 'a':2, 'd':30, 'e':40 }
{ 'a':0, 'b':50, 'c':60 }
{ 'a':1, 'd':70, 'c':80 }
{ 'a':1, 'b':90, 'e':100 }]
所需的输出是:
new_data = [{ 'a':0, 'b':[10,50], 'c':[20,60] }
{ 'a':1, 'd':[70], 'c':[80], 'b':[90], 'e':[100] }
{ 'a':2, 'd':[30], 'e':[40] }]
我有一个可以实现此目的的简单功能,但需要更快的方法(数据有大约1,000,000行和20列)。我找到想要合并的词典的方法非常昂贵。
这是我遇到计算时间问题的地方:
unique_idx, locations = [], {}
for i, row in enumerate(data):
_id = row['a']
if _id not in unique_idx:
unique_idx.append(_id)
locations[_id] = [i]
else:
locations[_id].append(i)
grouped_data = [data[loc] for loc in locations.values()]
我需要一种更快的方法来收集在一列中包含相同值的词典。理想情况下,我想要一个普通python的快速方法,但如果这可以简单地用一个很好的pandas DataFrame完成。