繁体   English   中英

Python:使用列表值添加到字典的最佳方式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM