저는 파이썬 2.7.6을 사용하고 있습니다. 을 사용하여 json 객체를 정렬하는 데 문제가 있습니다 (사전 목록 형태로).Python 정렬 방법은 두 자리 문자열을 세 자리 문자열로 처리합니다.
처음 정렬 된 출력을 검사했을 때 중간에 작은 숫자가 있기 때문에 목록이 부분적으로 만 정렬 된 것 같습니다. 면밀한 조사에서 93과 같은 두 자리 숫자가 93X처럼 취급되고있는 것처럼 보입니다. 이 통찰력으로 정렬 된 결과가 올바른 것으로 나타났습니다.
왜 이런 일이 발생하는지 알 수 없습니다. 처음에는 json 객체를 정렬하기 전에 파이썬 객체로 제대로 변환하지 않았기 때문에 그것이 가능할 것이라고 생각했습니다. 그러나이 코드는 인 json.load이 json 객체를 비동기 객체로 비 직렬화 할 것이므로이 문제는 아닌지 의심 스럽습니다.
Here's the jsbin "정렬 된"출력 정렬 된 목록을 다시 정렬하려고 시도했지만 정확한 결과를 얻을 수 있습니다. 아래
코드 : 당신은 지금 AveragePoints
값이 수레로 비교됩니다이
sorted(data, key = lambda item : float(item["AveragePoints"]), reverse = True)
같은 정렬하기 전에 숫자로 AveragePoints
을 변환 할 필요가
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()
아마도 : key = lambda item : float (item [ "AveragePoints"])'? –
문자열은 사전 식으로 정렬되므로 "천문학적"이 "큰"것과 같은 방식으로 "100"이 "2"보다 작습니다. – tdelaney
이 문제는 json이 올바르지 않기 때문에 발생합니다. 정수는''AveragePoints ': 999''가 아니라''AveragePoints ": 999'로 인코딩되어야합니다. 이 문제를 해결하면 코드가 잘 작동합니다! ('float'도 효과가 있지만 증상이 아닌 원인을 치료하는 것이 항상 더 좋습니다.) – georg