2015-06-09 8 views
1

В настоящее время у меня есть код ниже, но по какой-то причине он сортирует только первое число из массива, например, если число было 1000, и оно сравнивалось с 50, 50 было бы больше 1000. Как я могу исправить это?Как исправить эту ошибку сортировки?

#!/usr/local/bin/python3.4 
import operator 
import pygame, sys 
from pygame.locals import * 
import random 

placement = [1, 2, 3, 4, 5] 
data = [ 
    {"score": "1000", "grade": "E", "music": "song5", "maxcombo": "1", "perfect": "20", "great": "1", "good": "20", "miss": "1"}, 
    {"score": "200", "grade": "D", "music": "song4", "maxcombo": "2", "perfect": "20", "great": "2", "good": "20", "miss": "2"}, 
    {"score": "500", "grade": "C", "music": "song3", "maxcombo": "3", "perfect": "20", "great": "3", "good": "20", "miss": "3"}, 
    {"score": "400", "grade": "B", "music": "song2", "maxcombo": "4", "perfect": "20", "great": "4", "good": "20", "miss": "4"}, 
    {"score": "300", "grade": "A", "music": "song1", "maxcombo": "5", "perfect": "20", "great": "5", "good": "20", "miss": "5"}, 
] 

print (sorted(data, key=operator.itemgetter("score"), reverse=True)) 

ответ

0

"1000" не является числом. Это строка, символами которой являются цифры. Если вы хотите сортировать численно, представляйте свои данные с числами.

data = [ 
    {"score": 1000, "grade": "E", "music": "song5", "maxcombo": 1, "perfect": 20, "great": 1, "good": 20, "miss": 1}, 
    #... etc 

Или, если вам по какой-то причине необходимо сохранить их как строки, преобразуйте их в целое число в ключевую функцию.

print (sorted(data, key=lambda row: int(row["score"]), reverse=True)) 
Смежные вопросы