Python排序方法将两位数字符串视为三位数字符串

Python排序方法将两位数字符串视为三位数字符串,python,json,python-2.7,sorting,dictionary,Python,Json,Python 2.7,Sorting,Dictionary,我使用的是Python2.7.6,使用sorted(以字典列表的形式)对json对象进行排序时遇到问题 当我第一次检查排序后的输出时,列表似乎只进行了部分排序,因为中间有较小的数字。仔细观察,似乎像93这样的两位数被视为93X。根据这一点,排序后的输出看起来是正确的 不知道为什么会这样。起初,我认为这可能是因为在排序之前,我没有正确地将json对象转换为python对象。但是,我怀疑这是问题所在,因为代码中的json.load会将json对象反序列化为python对象 “排序”输出的。我尝试过重

我使用的是Python2.7.6,使用sorted(以字典列表的形式)对json对象进行排序时遇到问题

当我第一次检查排序后的输出时,列表似乎只进行了部分排序,因为中间有较小的数字。仔细观察,似乎像93这样的两位数被视为93X。根据这一点,排序后的输出看起来是正确的

不知道为什么会这样。起初,我认为这可能是因为在排序之前,我没有正确地将json对象转换为python对象。但是,我怀疑这是问题所在,因为代码中的json.load会将json对象反序列化为python对象

“排序”输出的。我尝试过重新排序排序后的列表,它给出了完全相同的结果

代码如下:

import json

json_data = open('test.json')
data = json.load(json_data)

results = sorted(data, key = lambda item : item["AveragePoints"], reverse = True)

with open('output.json', 'w') as outfile:
    json.dump(results, outfile);

json_data.close()

排序前需要将
AveragePoints
转换为数字,如下所示

sorted(data, key = lambda item : float(item["AveragePoints"]), reverse = True)
现在,
AveragePoints
值将作为浮点数进行比较,以便正确排序


注意:如果您确定
AveragePoints
始终是一个整数,您可以使用
int
函数而不是
float

也许:
key=lambda item:float(item[“AveragePoints”])
?字符串按字典顺序排序,因此“100”小于“2”的方式与“天文”相同小于“大”。此问题是因为您的json不正确。整数应该这样编码,即
“AveragePoints”:999
,而不是
“AveragePoints”:“999”
。解决了这个问题,你的代码就可以正常工作了!(
float
也能起作用,但最好是治愈病因而不是症状)。谢谢,这很有效。最初我没有转换,因为有一些示例可以对字符串进行排序,我猜这也适用于字符串数字。@YanYi尝试使用此
打印(排序([“1”、“10”、“01”)
。我想你会更明白的