当前位置: 首页 > 面试题库 >

如何在Python中设置字典的初始大小?

吕向阳
2023-03-14
问题内容

我将大约400万个不同的键放入Python字典中。创建此字典大约需要15分钟,并且会消耗我的计算机上大约4GB的内存。完全创建字典后,查询字典很快。

我怀疑字典的创建会消耗大量资源,因为字典经常被重新整理(因为字典的数量巨大地增长)。是否可以在Python中创建具有一些初始大小或存储桶编号的字典?

我的字典从数字指向一个对象。

class MyObject(object):
  def __init__(self):
    # some fields...

d = {}
d[i] = MyObject()  # 4M times on different key...

问题答案:

对于性能问题,总是最好进行衡量。以下是一些时间安排:

 d = {}
 for i in xrange(4000000):
     d[i] = None
 # 722ms

 d = dict(itertools.izip(xrange(4000000), itertools.repeat(None)))
 # 634ms

 dict.fromkeys(xrange(4000000))
 # 558ms

 s = set(xrange(4000000))
 dict.fromkeys(s)
 # Not including set construction 353ms

最后一个选项不做任何调整大小,它只是复制集合中的哈希值并增加引用。如您所见,调整大小不会花费很多时间。可能是您的对象创建缓慢。



 类似资料:
  • 问题内容: 我试图弄清楚如何为redux中的商店设置初始状态。我以https://github.com/reactjs/redux/blob/master/examples/todos- with- undo/reducers/index.js 为例。我试图修改代码,以便待办事项已初始化一个值。 按照文档操作:http : //redux.js.org/docs/api/createStore.h

  • 问题内容: 我试图通过向catalina.sh添加以下行来调整tomcat 7(CentOS,java -version:1.6.0_25-b06)实例的初始堆大小: 启动tomcat失败,并将以下消息记录到catalina.out: 这些选项有什么问题? 问题答案: 您不得使用。只需使用以下命令:

  • 问题内容: 是否可以通过python中的字典创建对象,使得每个键都是该对象的属性? 像这样: 问题答案: 当然,是这样的: 更新资料 正如布伦特·纳什(Brent Nash)所建议的那样,您还可以通过允许使用关键字参数来使其更加灵活: 然后您可以这样称呼它: 或像这样: 甚至像这样:

  • 当安装完成并首次启动 Navicat Monitor 时,浏览器会弹出并打开你的 Navicat Monitor 的网址“http://<your_ip_address>:<port_number>”。你需要在欢迎页面完成 Navicat Monitor 的基本配置。 【注意】<your_host_address> 是安装了 Navicat Monitor 的系统的主机名,以及 <port_num

  • 我正在使用Flink 1.3.2和scala构建一个流媒体应用程序,我的Flink应用程序将监视一个文件夹,并将新文件流到管道中。文件中的每条记录都有一个相关的时间戳。我想使用此时间戳作为事件时间,并使用AssignerWithPeriodicWatermarks构建水印,我的水印生成器如下所示: 但是,由于我的文件夹中有一些旧数据,我不想处理它们。旧文件中记录的时间戳是

  • 问题内容: 据我所知,有四种方法可以在Swift中声明字典: 似乎这四个选项产生相同的结果。 这些有什么区别? 问题答案: 您要做的只是注意到您可以: 使用显式变量类型,或者让Swift根据分配给它的值来推断变量的类型。 使用正式的指定通用泛型符号,或使用内置的“语法糖”来描述字典类型。 二乘二就是四。 实际上,实际上您已经省略了一些可能性。例如,你 可以 说 当然,在现实生活中,您不愿做 任何