适用于百万项的可清洗容器以及每次迭代中的修改

时间:2015-08-24 22:39:40

标签: python list numpy dictionary graph

我目前正在处理由十几个项目填充的字典,这些项目在几次迭代后会增长到十几万字典的项目。从根本上说,我的项目由多个ID,值和特征定义。我使用JSON中的数据创建我的dict,我从SQL服务器收集。

我执行的操作例如:

  • 以JSON
  • 获取SQL结果
  • 搜索项目' id1'和/或' id2'哪些是相同的
  • 将所有项目合并为相同的' id1'通过汇总浮动('值')

查看我的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 elementsFastest 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

当我在列表中得到十几个词组时,它开始变得很长(几分钟)。

0 个答案:

没有答案