关于python:为什么json.keys()以不同的顺序获取密钥

Why json.keys() get keys in different order

本问题已经有最佳答案,请猛点这里访问。

嗨,我有以下python代码:

1
2
3
4
5
6
import json
jsonpost = json.loads('{"Player": {"_id":"3","firstName":"kim","surname":"jones"},"newTable": {"_id":"4","SurName":"abcd"}}')

for key in jsonpost.keys():
    for innerkey in jsonpost[key]:
        print innerkey

我的问题是,当我打印出内部密钥时,jsonpost[‘player’]的密钥顺序如下:

1
_id , surname, firstName


python字典在内部使用哈希表实现。这意味着不保留键顺序。这是个问题吗?


无论是javascript的JSON还是python的dict都有排序的概念。您可以在python中使用collections.OrderedDict来摆脱它,但javascript没有这样的选择。


字典中的键从来不是以相同的顺序排列的,如果您希望它们始终以相同的顺序排列,您可以这样做。

1
sorted(jsonpost.keys())


字典排序被指定为未指定,您可以使用sort(whatever.keys()),也可以使用和排序字典,即,如果您运行的是python 2.7或更高版本,则使用collections.OrderedDict


python字典本身就是无序的,所以当您打印出来时,它们的键可能是无序的。

如果订单很重要,您可以使用OrderedDict

1
2
import collections
jsonpost = collections.OrderedDict(sorted(jsonpost.items()))

或者,您可以改为for循环:

1
2
3
for key in sorted(jsonpost.keys()):
    for innerkey in jsonpost[key]:
        print innerkey