Python 每个迭代中用于百万项和修改的哈希容器
我目前正在处理由十几个条目填充的字典,经过几次迭代,这些条目会增长到上千万个字典条目。基本上,我的项目是由几个ID、值和特征定义的。我使用从SQL server收集的JSON数据创建dict 我执行的操作如下所示:Python 每个迭代中用于百万项和修改的哈希容器,python,list,numpy,dictionary,graph,Python,List,Numpy,Dictionary,Graph,我目前正在处理由十几个条目填充的字典,经过几次迭代,这些条目会增长到上千万个字典条目。基本上,我的项目是由几个ID、值和特征定义的。我使用从SQL server收集的JSON数据创建dict 我执行的操作如下所示: 获取JSON中的SQL结果 搜索与“id1”和/或“id2”相同的项目 通过求和浮点('值')合并具有相同“id1”的所有项 请参见类似于my dict的示例: [ {'id1':'01234-01234-01234', 'value':'10', 'cat
- 获取JSON中的SQL结果
- 搜索与“id1”和/或“id2”相同的项目
- 通过求和浮点('值')合并具有相同“id1”的所有项
[
{'id1':'01234-01234-01234',
'value':'10',
'category':'K'}
...
{'id1':'01234-01234-01234',
'value':'5',
'category':'K'}
...
]
我希望得到的是:
[
...
{'id1':'01234-01234-01234',
'value':'15',
'category':'K'}
...
]
我可以用dict of 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位体系结构上的一个字典中安装了数百万条DICT。我想在时间和Ram上优化我的代码和操作。有没有比字典字典更好的技巧或容器来实现这种操作?创建一个新对象(每次迭代都会删除第一个对象)或更改可散列对象本身更好吗
我正在使用Python 3.4
编辑:将问题简化为一个关于值的问题。
这个问题类似于or,但在我的例子中,我的dict中有字符串
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
def merge\u simple\u dict(输入列表=列表):
i=0
#用id对交换的词汇进行排序。
尝试:
合并列表=已排序(deepcopy(输入列表),key=lambda k:k['id'])
而(i+1)=len(合并列表):
打破
其他:
通过
i+=1
除异常作为错误外:
打印('相似dict的合并失败')
打印(错误)
提升
返回合并列表
返回合并列表
当我在列表中看到十几万条口述时,它开始变得很长(几分钟)。我不知道你们想做什么?你能说得更具体些吗?你有什么代码可以展示吗?从你的问题来看,根本不清楚你在处理什么样的数据集,或者你想用它做什么。它是平面结构,还是节点相互引用?它是一棵树吗?还是更复杂的图形?如果您以实际的方式解释数据代表什么以及您希望从中计算什么,可能会有所帮助。示例中的外部容器不是字典。它(在Python中)看起来像一组字典。外层没有任何键。在我的例子中,我的数据是由化学产品组成的材料的数据,化学产品是由原子组成的分子组成的。一个化工产品可以由几个不太复杂的亚化工产品组成。我想知道我产品的成分,以及每种成分在不同层次上的总量:化学产品、分子、原子。它看起来像一棵树或一个有向图,有时会有循环。SQL中的数据看起来像:物料Id、组件Id、数量(值)、链接到物料Id。