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

2024-04-20 13:41:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个类,其中包括一个带有整数键和列表值的字典。给这个字典添加值似乎是一个真正的瓶颈,我想知道是否有某种方法可以加快我的代码。在

class myClass():

  def __init__(self):
    self.d = defaultdict(list)

  def addValue(self, index, value):
    self.d[index].append(value)

这真的是最好的方法吗?我并不真正关心值的顺序,所以可能有一个更适合的数据结构,它具有更快的附加。再说一次,“append”似乎不是主要问题,因为如果我简单地附加到一个空列表中,代码会快得多。我猜是加载之前存储的列表占用了大部分时间?在


我发现问题不在dict中,而是在list-append中(尽管我在我的原始帖子中声明了另一个问题,对此我深表歉意)。这个问题是由于Python的垃圾回收器中的一个错误引起的,这在this other question上有很好的解释。在添加所有值之前禁用gc,然后重新启用它,可以极大地加快进程!在


Tags: 方法代码self列表index字典initvalue
3条回答

比较一下:

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,并对其进行操作。在

快一点吗?在

最后,我可以说,我在原始问题中的代码比所有其他建议都快或一样快。在

相关问题 更多 >