【发布时间】:2014-05-05 07:15:35
【问题描述】:
据我所知,Python 字典是一个 HashTable,如果表的大小超过当前表最大大小 (Objects\dictnotes.txt) 的 2/3,它会调整大小。
我需要删除很多字典项目(数千个),例如,每小时一次,基于简单的标准 - if key
我了解用于创建新 dict 以及在迭代时调整 dict 大小的 dict 理解。
# dict comprehension
new_d = {key: value for key, value in d.iteritems() if key >= guard_condition }
# resize while iterating
for key in d:
if key < guard_condition:
del d[key]
还有其他方法可以达到这个目的吗? 哪个更快?
【问题讨论】:
-
您的两种方法不会产生相同的输出。第一个将保留所有等于
guard_condition的键,第二个将丢弃它们。 -
“几千个键,每小时一次”对于计算机来说听起来并不多。实际需要多长时间?你需要多长时间?字典有多大,你是删除大部分还是保留大部分?是什么样的键值/守卫条件测试?
-
这个 sn-p 实际上是您应用程序的瓶颈吗?你知道:“过早的优化......”
-
用几千个键对它进行 cProfiling 并识别可能的瓶颈如何?
-
好的@viach 我也这么想。你如何确定要保留什么?门槛是什么意思?您可能会更好地使用 LRU(最近最少使用)队列来确定要删除的内容,并在添加新项目时即时删除,删除其他项目,而不是经常这样做。这将随着时间的推移摊销性能损失。
标签: python performance python-2.7 dictionary