2015-04-09 2 views
0

Я добрая новичок в python. Я читал много, и теперь я хочу решать проблемы. Я пытаюсь решить каждое решение, которое я могу использовать на DailyProgrammer (reddit).Сортировка списка кортежей происходит неправильно

Во всяком случае, у меня проблема. Я пытаюсь сортировать список кортежей после второго значения. И это прекрасно работает, за исключением одного. Одно из значений, которое должно быть первым в списке, заканчивается последним.

class UserTime(object): 

    def __init__(self, user, time): 
     self.user = user 
     self.time = time 

    def __repr__(self): 
     return '{}: {}'.format(self.user, 
            self.time) 
user_time_list = [ 
    UserTime('UserA', '41.04'), 
    UserTime('UserB', '7.06'), 
    UserTime('UserC', '20.63'), 
    UserTime('UserD', '54.28'), 
    UserTime('UserE', '12.59'), 
    UserTime('UserF', '31.17'), 
    UserTime('UserG', '63.047') ] 

print(user_time_list) 
print 
print(sorted(user_time_list, key=lambda user: user.time)) 

Output: 

[UserA: 41.04, UserB: 7.06, UserC: 20.63, UserD: 54.28, UserE: 12.59, UserF: 31.17, UserG: 63.047] 

[UserE: 12.59, UserC: 20.63, UserF: 31.17, UserA: 41.04, UserD: 54.28, UserG: 63.047, UserB: 7.06] 

Я пробовал каждую технику в Интернете. Поиск в Google. Даже функции gettattribute. Я также попытался сделать это решение, не делая класс и просто составляя простой список кортежей. Такая же проблема ... UserB заканчивается последним. И это неправильно, потому что он явно победитель;)

ответ

0

Вы сортируете строки. Это означает, что они сортируются по лексикографическому порядку. В этом порядке . находится за номерами.

Вы хотите, чтобы цифры в список поплавками, которые действительно получают численно по сравнению:

user_time_list = [ 
    UserTime('UserA', 41.04), 
    UserTime('UserB', 7.06), 
    UserTime('UserC', 20.63), 
    UserTime('UserD', 54.28), 
    UserTime('UserE', 12.59), 
    UserTime('UserF', 31.17), 
    UserTime('UserG', 63.047) ] 
+0

Ой блин. Такое простое решение. Большое спасибо :) –

+0

Нет проблем, и добро пожаловать в Stack Overflow, кстати. Вы можете пометить ответ как «это решило мою проблему», щелкнув галочку слева. –

+0

Ха-ха спасибо. С тех пор я буду держать вас в секрете. Особенно, когда я перехожу к средним и трудным проблемам на Dailyprogrammer. ;) –

Смежные вопросы