这个问题是相对于另一个问题在这里问: Sorting 1M records的Python:更新一个元组列表...最快的方法
因为我已经想通了,我与排序遇到的问题。每次更新数据时,我都会将字典中的项目排列成列表。后来我意识到,Python排序的很多功能在于它能够更快地对已经部分排序的数据进行排序。
所以,这是问题。假设我有以下内容作为样本集:
self.sorted_records = [(1, 1234567890), (20, 1245678903),
(40, 1256789034), (70, 1278903456)]
列表中的每个元组的t[1]
是一个唯一的ID。现在我想更新此名单与follwoing:
updated_records = {1245678903:45, 1278903456:76}
什么是我这样做结束了
self.sorted_records = [(1, 1234567890), (45, 1245678903),
(40, 1256789034), (76, 1278903456)]
目前,我做这样的事情的最快方法:
updated_keys = updated_records.keys()
for i, record in enumerate(self.sorted_data):
if record[1] in updated_keys:
updated_keys.remove(record[1])
self.sorted_data[i] = (updated_records[record[1]], record[1])
但我确信有一个更快,更优雅的解决方案。
任何帮助?
*编辑 原来我用坏exaples的IDS,因为他们最终的排序顺序,当我做我的更新。我实际上对t [0]按排序顺序感兴趣。在执行更新之后,我打算使用更新后的数据,但它看起来像平分线可能是按排序顺序插入的票据。 结束编辑*
措施小心(溶液在我的答案详细编码,在Brian的,以及有关平分模糊的建议),因为的.sort是通常令人惊讶的快(尤其是已经大部分排序的数据),而对分几乎没有什么好处。 – 2009-07-27 15:05:55