Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 Python 2.7添加到dict的速度太慢_Python 2.7_Dictionary - Fatal编程技术网

Python 2.7 Python 2.7添加到dict的速度太慢

Python 2.7 Python 2.7添加到dict的速度太慢,python-2.7,dictionary,Python 2.7,Dictionary,我正在编写Python脚本。它从文件中获取关于订阅者流量的信息,并将其放在特殊的结构中。它是有效的。但是它工作得太慢了。我用PHP编写了相同的算法,它的运行速度要快得多。我注意到Python花了很多时间将数据放入dict中。PHP脚本花了6秒处理我的测试文件,而Python脚本花了12秒(从文件中获取数据大约7秒,填充结构大约5秒)。 我的结构如下所示:struct[subscriberId][protocolId]=octents 我使用下面的函数来填充它们: def addBytesToSt

我正在编写Python脚本。它从文件中获取关于订阅者流量的信息,并将其放在特殊的结构中。它是有效的。但是它工作得太慢了。我用PHP编写了相同的算法,它的运行速度要快得多。我注意到Python花了很多时间将数据放入dict中。PHP脚本花了6秒处理我的测试文件,而Python脚本花了12秒(从文件中获取数据大约7秒,填充结构大约5秒)。 我的结构如下所示:struct[subscriberId][protocolId]=octents

我使用下面的函数来填充它们:

def addBytesToStatStruct(struct, subscriberId, protocolId, octents):
  if subscriberId in struct:
    if protocolId in struct[subscriberId]:
      struct[subscriberId][protocolId] += octents
      return
      else:
        struct[subscriberId][protocolId] = octents
        return
  else:
    struct[subscriberId] = {protocolId : octents}

我可能做错什么了吗?我想我的问题出现是因为加法过程中发生了碰撞。据我所知,PHP使用链接,而Python使用开放寻址。您能给我一个提示吗?我如何使Python dict更快?

您可以尝试使用。不确定这是否会大大加快您的代码速度(不过应该会有一点加快)…非常感谢您的回答!我试过collections.defaultdict和collections.OrderedDict。不幸的是,这并没有使我的脚本速度明显加快。