Python / JSON按特定键排序数组

时间:2015-12-01 01:38:22

标签: python arrays json sorting

从我的JSON结果我得到了这个:

{

   "792777": {

      "parent_area": null,

      "generation_high": 7,

      "all_names": {},

      "id": 792777,

      "codes": {

         "osm_rel": "59470"

      },

      "name": "Brasil",

      "country": "G",

      "type_name": "OSM Administrative Boundary Level 2",

      "generation_low": 7,

      "country_name": "Global",

      "type": "O02"

   },

   "792876": {

      "parent_area": null,

      "generation_high": 7,

      "all_names": {},

      "id": 792876,

      "codes": {

         "osm_rel": "3073228"

      },

      "name": "Região Sudeste",

      "country": "G",

      "type_name": "OSM Administrative Boundary Level 3",

      "generation_low": 7,

      "country_name": "Global",

      "type": "O03"

   },
}

然后,使用这个JSON,我这样做:

    for area in sorted(data.keys()):
        print data[area]["type"]

我的问题是我必须通过"类型"来排序我的字典。我的JSON的属性。

重要提示:属性"输入"有字符串和int连接," O02"和" O03" ..

我试过了:

    for area in sorted(data.keys(), keys="type"):
        print data[area]["type"]

没有工作!任何帮助都会受到重视!

2 个答案:

答案 0 :(得分:0)

问题在于你误解了key有序参数的用法。来自docs

  

key指定一个参数的函数,该函数用于从每个列表元素中提取比较键

因此,必须是一个函数,它将迭代中的单个项目排序,在这种情况下为"792876"这样的单个区域,并返回一个类似的键。

data = json.loads(...)

def get_type_by_area(areax):
    return data[areax]["type"]

for area in sorted(data, key=get_type_by_area):
    pass  # Do something

答案 1 :(得分:0)

请记住。你不能排序词典。这是因为他们的工作方式。 但是,Python提供了collections.OrderedDict,您可以使用它来按顺序保存数据。

a = OrderedDict()
for k in sorted(data.keys()):
    a[k] = data[k]