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

时间:2013-07-31 15:28:00

标签: python json

您好我在python中有以下代码:

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']键的顺序如下:

_id , surname, firstName

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

字典中的键永远不会以相同的顺序排列,如果您希望它们始终按照相同的顺序排列代码,您可以这样做

sorted(jsonpost.keys())

答案 2 :(得分:1)

JavaScript的JSON和Python的dict都有排序的概念。您可以在Python中使用collections.OrderedDict来逃避它,但JavaScript没有这样的替代方案。

答案 3 :(得分:0)

Python词典本质上是无序的,因此当您打印出来时,键可能会出现故障。

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

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

或者您可以将for循环更改为:

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

答案 4 :(得分:0)

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