从我的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"]
没有工作!任何帮助都会受到重视!
答案 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]