【发布时间】:2021-06-26 22:39:20
【问题描述】:
我一直认为字典是无序的,这意味着我们必须使用像 OrderedDict 这样的东西来让它记住插入顺序。
当我看到 python 文档时,有人提到从 python 3.7 dict 是有序的。
我对此没有什么疑问,
- 如果 dict 保留插入顺序,这是否意味着即使集合中的
defaultdict也会这样做? - 如果我有下面这样的数据,json.dumps 和 json.loads 功能与 defaultdict 数据怎么样,
编辑:https://docs.python.org/3/library/json.html (json 文档)
在 Python 3.7 之前,不保证 dict 是有序的,所以输入 并且输出通常被打乱,除非 collections.OrderedDict 被特别要求。从 Python 3.7 开始,常规 dict 变成了顺序保留,因此不再需要指定 collections.OrderedDict 用于 JSON 生成和解析。
就第二个疑问而言,我在 python 中找到了上述语句 json docs,但我想知道这是否适用于 嵌套的 defaultdict 数据。
# example defaultdict data for 2 doubt.
from collections import defaultdict
data = defaultdict(dict)
data["0"]["a"] = "Google"
data["0"]["b"] = "Google"
data["0"]["c"] = "Google"
data["1"]["a"] = "Google"
data["1"]["b"] = "Google"
data["1"]["c"] = "Google"
data["2"]["a"] = "Google"
data["2"]["b"] = "Google"
data["2"]["c"] = "Google"
data["3"]["c"] = "Google"
data["3"]["b"] = "Google"
data["3"]["a"] = "Google"
json.dumps(data) # will these operations preserve the order
json.loads(data)
我已经尝试过这些并且它保持秩序,但我想确保无论如何这将始终保持秩序。
【问题讨论】:
-
试试这个不是更容易吗?
-
你尝试的时候发生了什么?
-
文档中说“defaultdict 是内置 dict 类的子类。它覆盖了一个方法并添加了一个可写实例变量。其余功能与 dict 类相同,未记录在这里。”
-
defaultdict 和 JSON 是完全不同的问题——它们属于两个问题。
-
JSON 格式不支持对象排序json.org/json-en.html
标签: python python-3.x