Python字典排序

3 投票
3 回答
8256 浏览
提问于 2025-04-17 15:34

我正在写一个网页应用程序,它需要一个json文件,这个文件里的json对象在Python列表中要按照正确的顺序排列。应该是先x再y,但无论我怎么尝试,返回的值总是y在前,x在后。

list: [{'y': 0.0, 'x': 1360633172168}, {'y': 0.0, 'x': 1360633172168}, ...

有没有人能帮我看看,怎么在把这些值输出到控制台之前重新排序呢?

        label = ["x", "y"]
        sen = []
        for i in average:
            now = int(round(time.time() * 1000))
            l = now, i[0]
            sen.append(l)
        x = [dict(zip(label, e)) for e in sen]

我尝试了几种方法,但每次得到的结果都是一样的。

亚当

3 个回答

0

如果你真的需要让键值对按特定顺序排列,那你就得手动构建你的“JSON”输出,因为Python的dictjson模块都不支持固定的键顺序。

6

唯一的解决办法是传递一个数组,或者在Python这边存储一个排序好的键的顺序,然后用这个顺序来访问字典。

JSON:

{
    "order": ["x", "y"],
    "d": {x: 34, y:36}
}

PYTHON:

for key in order:
    print d[key]

这样你就可以按照正确的顺序遍历字典的键了。

字典是一种哈希表的形式,因此它们不会保留键的顺序。

6

你可能想了解一下 collections.OrderedDict 这个东西。

In [9]: d = collections.OrderedDict()

In [10]: d['x'] = 1360633172168

In [11]: d['y'] = 0.0

In [12]: d
Out[12]: OrderedDict([('x', 1360633172168), ('y', 0.0)])

In [13]: d['x']
Out[13]: 1360633172168

In [14]: d['y']
Out[14]: 0.0

撰写回答