【发布时间】:2012-06-22 13:22:44
【问题描述】:
我正在构建一个类,其中包含一个带有整数键和列表值的字典。不过,向该字典添加值似乎是一个真正的瓶颈,我想知道是否有某种方法可以加快我的代码速度。
class myClass():
def __init__(self):
self.d = defaultdict(list)
def addValue(self, index, value):
self.d[index].append(value)
这真的是这样做的最佳方式吗?我并不真正关心值的顺序,所以也许有一个更合适的数据结构可以更快地追加。再说一次,“附加”似乎不是主要问题,因为如果我只是附加到一个空列表,代码会快很多。我猜是加载之前存储的列表占用了大部分时间?
我发现问题不在字典中,而是在列表附加中(尽管我在原始帖子中另有声明,对此我深表歉意)。这个问题是由于 Python 的垃圾收集器中的一个错误造成的,this other question 对此进行了很好的解释。在添加所有值之前禁用 gc 然后重新启用它,极大地加快了进程!
【问题讨论】:
-
将项目添加到列表并从对象或字典中获取值都不需要时间。要加快程序速度,您可以通过分析而不是通过更改随机代码段来发现瓶颈。
-
将项目映射到现有键是否比向新键添加值要快得多?
-
我刚刚发现问题不在字典中,而是在列表附加中(尽管我在原始帖子中另有声明,对此我深表歉意)。然后我在stackoverflow.com/questions/2473783/… 上找到了我的问题的答案。由于我是这个网站的新手,我不知道在这种情况下标准程序是什么:我应该删除我的原始帖子吗?或者在帖子中添加上述详细信息和答案?
标签: python dictionary