我正在使用 python 2.7.6,并且在使用 sorted (以字典列表的形式)对 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()
最佳答案
排序前需要将AveragePoints
转换为数字,如下所示
sorted(data, key = lambda item : float(item["AveragePoints"]), reverse = True)
现在 AveragePoints
值将作为 float 进行比较,以便排序正确。
注意:如果您确定AveragePoints
始终是一个整数,您可以使用int
函数代替float
。
关于Python排序方法将两位数字字符串视为三位数字字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27470897/