Python dict排序

时间:2013-02-12 01:44:57

标签: python dictionary

我正在编写一个Web应用程序,它希望json文件在python列表中具有正确的json对象排序。它应该按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 :(得分:6)

唯一的解决方案是传递一个数组,或者存储命令python一边的已排序的键,并使用它来访问dict。

JSON:

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

PYTHON:

for key in order:
    print d[key]

这将允许您按正确的顺序浏览dict键。

Dicts是hash map的一种形式,因此它们不保留关键顺序。

答案 1 :(得分: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

答案 2 :(得分:0)

如果您确实需要按特定顺序拥有密钥,则需要手动构建“JSON”输出,因为Python的dictjson模块都不支持固定密钥排序。