【问题标题】:python- constant dictionary?python-常量字典?
【发布时间】:2014-08-04 19:55:31
【问题描述】:

我只是生成一个python字典列表,然后将其序列化为json。
基本上我的代码是一个循环,我在其中执行以下操作:

ls.append({..values..})

在此之后我不会更改字典。

问题,python中是否有一个常量字典,显然这里的重点是内存,因为我知道字典比列表占用更多的内存。我只需要{key:value} 的结构用于json,而不是字典的其他功能。

只是好奇我是否可以稍微优化一下我的代码。

【问题讨论】:

  • 如果它永远不会改变,并且你只会以 JSON 形式使用它,你可以将它转换为 JSON,然后将其保存在一个字符串中。
  • 为什么你认为不可变字典(如果存在的话)会比可变字典消耗更少的内存?
  • Python 没有常量
  • @Robᵩ 很简单,因为字典为哈希表占用了大量空间。
  • 所以你不需要哈希表?也就是说,你愿意忍受 O(n) 的查找时间吗?

标签: python dictionary constants


【解决方案1】:

从本质上讲,JSON 只是一种将更复杂的结构转换为纯文本的标准化方式,任何与 JSON 兼容的应用程序都可以理解这种方式。因此,存储一个不变的、使用 JSON 的对象的最节省时间和内存的方法是将其转换为其 JSON 文本形式并将其存储在一个字符串中。这不仅使您免于将字典存储在内存中,而且之后您无需再进行任何 JSON 转换。您可以将该字符串输出到任何需要接收 JSON 对象的应用程序。

>>> import json
>>> testdict = {}
>>> testdict["pooh bear"] = "honey tree"
>>> jsonstr = json.dumps(testdict)
>>> jsonstr
'{"pooh bear": "honey tree"}'

正如 cmets 所指出的,Python 没有常量,据我所知,它也没有更受内存限制的字典。字典被实现为一个哈希表,它是为非常快速的插入和访问而设计的;每当你有一个非常快的数据结构时,你的权衡通常是它会占用大量内存。在您能想到的大多数数据结构中,这都是一个持久的事情。

【讨论】:

  • 我能做到。不过,我不确定输出会是什么。今天我在完成我的字典列表后执行 json.dump(list,response) 。我认为如果我这样做,我会有一个字符串列表,不确定它是否不会被javascript接受。
  • json.dumps 只是输出一个字符串。如果您必须将许多字典组装到一个 JSON 对象中,那么在没有转储的情况下手动执行可能会有些棘手,但可以做到。
  • 可能要考虑更新您的示例数据!
  • @joe_04_04 好点。选择更安全的东西。
猜你喜欢
  • 2014-06-07
  • 1970-01-01
  • 2011-02-25
  • 2012-10-11
  • 2016-12-05
  • 2010-10-25
  • 1970-01-01
  • 2011-04-20
相关资源
最近更新 更多