我目前正在处理由十几个项目填充的字典,这些项目在几次迭代后会增长到十几万字典的项目。从根本上说,我的项目由多个ID,值和特征定义。我使用JSON中的数据创建我的dict,我从SQL服务器收集。
我执行的操作例如:
查看我的dict看起来像一个例子:
[
{'id1':'01234-01234-01234',
'value':'10',
'category':'K'}
...
{'id1':'01234-01234-01234',
'value':'5',
'category':'K'}
...
]
我想得到的是:
[
...
{'id1':'01234-01234-01234',
'value':'15',
'category':'K'}
...
]
我可以改用dicts的字典:
{
'01234-01234-01234': {'value':'10',
'categorie':'K'}
...
'01234-01234-01234': {'value':'5',
'categorie':'K'}
...
}
并获得:
{'01234-01234-01234': {'value':'15',
'categorie':'K'}
...
}
我刚刚在Ram中使用了专用的4Go和64位架构的一本字典中的数百万个dicts我想在时间和RAM中优化我的代码和操作。是否有比字典词典更好的技巧或更好的容器来实现这些操作?是否更好的是创建一个新对象,为每次迭代擦除第一个对象或更改可清除对象本身?
我正在使用Python 3.4。
编辑:在一个关于价值的问题中简化了问题。 这个问题类似于How to sum dict elements或Fastest way to merge n-dictionaries and add values on 2.6,但就我而言,我的字典中有字符串。
EDIT2:目前,最好的表现得益于这种方法:
def merge_similar_dict(input_list=list):
i=0
#sorted the dictionnary of exchanges with the id.
try:
merge_list = sorted(deepcopy(input_list), key=lambda k: k['id'])
while (i+1)<=(len(merge_list)-1):
while (merge_list[i]['id']==merge_list[i+1]['id']):
merge_list[i]['amount'] = str(float(merge_list[i]['amount']) + float(merge_list[i+1]['amount']))
merge_list.remove(merge_list[i+1])
if i+1 >= len(merge_list):
break
else:
pass
i += 1
except Exception as error:
print('The merge of similar dict has failed')
print(error)
raise
return merge_list
return merge_list
当我在列表中得到十几个词组时,它开始变得很长(几分钟)。