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

时间:2014-12-14 15:38:42

标签: python json python-2.7 sorting dictionary

我正在使用python 2.7.6,并且无法使用排序(以字典列表的形式)对json对象进行排序。

当我第一次检查排序的输出时,似乎列表只是部分排序,因为它们之间的数字较小。仔细观察,似乎像93这样的两位数字被视为93X。有了这种洞察力,排序后的输出就显得正确了。

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

Here's the jsbin"排序"输出。我已经尝试重新排序已排序的列表,它给了我完全相同的结果。

以下代码:

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()

1 个答案:

答案 0 :(得分:3)

您需要在排序前将AveragePoints转换为数字,例如

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

现在AveragePoints值将作为浮点数进行比较,以便排序正确。

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