Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 每个迭代中用于百万项和修改的哈希容器_Python_List_Numpy_Dictionary_Graph - Fatal编程技术网

Python 每个迭代中用于百万项和修改的哈希容器

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

我目前正在处理由十几个条目填充的字典,经过几次迭代,这些条目会增长到上千万个字典条目。基本上,我的项目是由几个ID、值和特征定义的。我使用从SQL server收集的JSON数据创建dict

我执行的操作如下所示:

  • 获取JSON中的SQL结果
  • 搜索与“id1”和/或“id2”相同的项目
  • 通过求和浮点('值')合并具有相同“id1”的所有项
请参见类似于my 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'}
...
]
我可以用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。