[英]Python: optimal way of adding to dictionary with list values
我正在构建一个类,其中包括带有整数键和列表值的字典。 为这个字典添加值似乎是一个真正的瓶颈,我想知道是否有某种方法来加速我的代码。
class myClass():
def __init__(self):
self.d = defaultdict(list)
def addValue(self, index, value):
self.d[index].append(value)
这真的是这样做的最佳方式吗? 我并不真正关心值的顺序,所以也许有一个更合适的数据结构,有更快的附加。 然后,'append'似乎不是主要问题,因为如果我只是附加到一个空列表,代码会快得多。 我想这是以前存储的列表的加载占用了大部分时间?
我发现问题不在dict中,但是在列表中附加(虽然我在原帖中声称不是这样,我为此道歉)。 这个问题是由于Python的垃圾收集器中的一个错误, 这个问题在另一个问题上有很好的解释。 在添加所有值然后重新启用它之前禁用gc会极大地加速该过程!
比较一下:
class myClass():
def __init__(self):
self.d = {}
def addValue(self, index, value):
self.d.setdefault(index, []).append(value)
他们说“请求宽恕比获得许可更好”。 现在你不是亲自要求许可,但我认为也许是defaultdict
,而这就是放慢它的速度。
try
这个:
class myClass():
def __init__(self):
self.d = {}
def addValue(self, index, value):
try:
self.d[index].append(value)
except KeyError:
self.d[index] = [value]
这会尝试访问字典中的index
键,如果它不存在则会引发KeyError
,并对其进行操作。
它更快吗?
作为结论,我可以说原始问题中的代码比所有其他建议更快或更快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.