我有一个运行的服务,它包含大约1,000,000个字典的列表,并执行以下操作
myHashTable = {}
myLists = { 'hits':{}, 'misses':{}, 'total':{} }
sorted = { 'hits':[], 'misses':[], 'total':[] }
for item in myList:
id = item.pop('id')
myHashTable[id] = item
for k, v in item.iteritems():
myLists[k][id] = v
Run Code Online (Sandbox Code Playgroud)
所以,如果我有以下词典列表:
[ {'id':'id1', 'hits':200, 'misses':300, 'total':400},
{'id':'id2', 'hits':300, 'misses':100, 'total':500},
{'id':'id3', 'hits':100, 'misses':400, 'total':600}
]
Run Code Online (Sandbox Code Playgroud)
我结束了
myHashTable =
{
'id1': {'hits':200, 'misses':300, 'total':400},
'id2': {'hits':300, 'misses':100, 'total':500},
'id3': {'hits':100, 'misses':400, 'total':600}
}
Run Code Online (Sandbox Code Playgroud)
和
myLists =
{
'hits': {'id1':200, 'id2':300, 'id3':100},
'misses': {'id1':300, 'id2':100, 'id3':400},
'total': {'id1':400, 'id2':500, 'id3':600}
}
Run Code Online (Sandbox Code Playgroud)
然后,我需要对每个myLists词典中的所有数据进行排序.
我目前正在做的事情如下:
def doSort(key):
sorted[key] = sorted(myLists[key].items(), key=operator.itemgetter(1), reverse=True)
which would yield, in the case of misses:
[('id3', 400), ('id1', 300), ('id2', 200)]
Run Code Online (Sandbox Code Playgroud)
当我有大约100,000条记录时,这很有效,但是有1,000,000条,至少需要5到10分钟才能对每条记录进行排序,总共16条(我原来的字典列表实际上有17个字段,包括弹出的id)
*编辑*此服务是ThreadingTCPServer,它有一个允许客户端连接和添加新数据的方法.新数据可能包括新记录(意味着对已经在内存中具有唯一"id"的字典)或修改后的记录(意味着具有其他键值对的不同数据的相同"id"
所以,一旦这个运行,我会传入
Run Code Online (Sandbox Code Playgroud)[ {'id':'id1', 'hits':205, 'misses':305, 'total':480}, {'id':'id4', 'hits':30, 'misses':40, 'total':60}, {'id':'id5', 'hits':50, 'misses':90, 'total':20 ]我一直在使用字典来存储数据,这样我就不会有重复数据了.在使用新的/修改的数据更新字典后,我会使用它们.
*结束编辑*
那么,对我进行排序的最佳方式是什么?有更好的方法吗?
| 归档时间: |
|
| 查看次数: |
7758 次 |
| 最近记录: |