1

如何OrderedDict在保留相同顺序的同时将 an 转换为普通字典?

我问这个的原因是因为当我从 API 获取数据时,我得到一个 JSON 字符串,我用它json.loads(str)来返回字典。从返回的这个字典json.loads(...)只是乱序并且是随机排序的。另外,我读到使用OrderedDict起来很慢,所以我想以与原始 JSON 字符串相同的顺序使用常规 dict。

有点题外话:无论如何都可以将 JSON 字符串转换为 dict using json.loads(...),同时保持相同的顺序而不使用collections.OrderedDict

4

2 回答 2

6

当您将 an 转换OrderedDict为 normaldict时,您不能保证将保留排序,因为 dicts 是无序的。这就是为什么OrderedDict首先存在的原因。

看起来你想吃蛋糕,也在这里吃。如果您希望保留 JSON 字符串的顺序,请使用我在评论中链接到的问题的答案将您的 json 字符串直接加载到OrderedDict. 但是您必须处理带来的任何性能损失(我不知道该惩罚是什么。对于您的用例来说,它甚至可以忽略不计。)。如果您想获得最佳性能,只需使用dict. 但它将是无序的。

于 2014-05-31T02:46:41.410 回答
1

JSON 对象和 Python 字典都是无序的。为了保持顺序,请使用映射到 Python 列表的 JSON 数组。JSON 数组的元素应该是 JSON 对象。这些将映射到 Python 字典的 Python 列表。

蟒蛇 3:

from collections import OrderedDict
import json

# Preserving order in Python dict:
ordered_dict = OrderedDict([
    ('a', 1),
    ('b', 2),
    ('c', 3),
])

# Convert to JSON while preserving order:
ordered_list = [{key: val} for key, val in ordered_dict.items()]
json.dumps(ordered_list)
# '[{"a": 1}, {"b": 2}, {"c": 3}]'

Javascript(JSON):

var orderedListStr = '[{"a": 1}, {"b": 2}, {"c": 3}]';
// We will receive this array of objects with preserved order:
var orderedList = JSON.parse(orderedListStr)
于 2016-04-07T07:24:59.207 回答