Python 3.4 JSON按整数键排序

0 投票
1 回答
910 浏览
提问于 2025-04-18 18:38

我在网上找了半天,虽然快要找到答案了,但总是差一点。我的目标是把一个JSON中的子元素列表按键(KEY)排序。可这些键是字符串形式的数字。举个例子:

print (json_reply['top']['sub'])

得到的结果是:

{'9': 800, '1': 800, '3': 800, '8': 800, '6': 800, '5': 800, '7': 800, '10': 700, '4': 800, '2': 800}

所以我试着根据网上找到的资料来排序。

sorted_reply = (sorted(json_reply['top']['sub'].items()))

得到的结果是:

[('1', 800), ('10', 700), ('2', 800), ('3', 800), ('4', 800), ('5', 800), ('6', 800), ('7', 800), ('8', 800), ('9', 800)]

虽然结果不同,但也差不多。现在看起来这不是JSON格式(这没关系,因为我还是可以用),但你可以看到“10”排在“1”后面。我猜是因为它把这些当成字符串来处理。我也试过用JSON的排序方法,但结果还是一样,只是格式变成了JSON。我发现网上很多人讨论的是如何排序值,而不是键。我尝试过修改已有的解决方案,但都不管用。

那么,我该如何把这些键当成整数来排序,这样“10”就会排在最后。不管它是否保持JSON格式。

1 个回答

4

给它一个排序的 key,这是一个对每个元素应用的函数,用来提供一个排序的值:

sorted(json_reply['top']['sub'].items(), key=lambda i: int(i[0]))

示例:

>>> d = {'9': 800, '1': 800, '3': 800, '8': 800, '6': 800, '5': 800, '7': 800, '10': 700, '4': 800, '2': 800}
>>> sorted(d.items(), key=lambda i: int(i[0]))
[('1', 800), ('2', 800), ('3', 800), ('4', 800), ('5', 800), ('6', 800), ('7', 800), ('8', 800), ('9', 800), ('10', 700)]

撰写回答