2015-05-01 3 views
1

У меня был файл с записями (highscores), хранящийся как int на каждой строке (с заголовком).Python: Сортировка кортежей в массиве на основе первого элемента

В моем проекте python я читал записи в массиве, а затем добавлял запись (только int), сортируя массив (с добавлением новой записи), а затем перезаписывая файл с новыми записями (и заголовком - которая осталась прежней)

Вот соответствующий код, который я использовал для этого:

highscores = [] 
with open("highscore.txt", "r") as f: 
    f.readline() # Reads header 
    for line in f: 
     highscores.append(line.strip()) 

highscores.append(wins) 
highscores = sorted(highscores, key=int, reverse=True) 
# Print sorted highscores print to file 
with open("highscore.txt", "w") as f: 
    for val in highscores: 
    print(val, file=f) 

Теперь у меня есть файл с записями, хранимыми в виде int /t string на каждой строке (с заголовком). Я не имею опыта чтения или сортировки массивов с кортежами и понятия не имею, как подойти к этому. Может ли кто-нибудь настроить меня на правильном пути или предоставить решение.

Я хотел бы прочитать запись int /t string из моего файла и поместить ее в массив highscores. Затем я хотел бы отсортировать массив, основанный на значении int, который является первым элементом кортежа (предполагая, что я не использую другой подход). Затем перезапись файла с новыми записями highscore.

Edit:

Я не должен, что, когда я писал highscore.append(wins), выигрывает это целая переменная Я хотел бы добавить победы и имя (строка в моей переменной).

+0

Взгляните на [split] (https://docs.python.org/3.4/library/stdtypes.html#str.split) и [отсортировано] (https://docs.python.org/3.4/ библиотека/functions.html? изюминка = отсортирован # отсортирован). – Marein

ответ

1

Вам не придется менять много:

highscores = sorted(highscores, key=lambda s: int(s.split()[0]), reverse=True) 

Основная функция примет вашу линию s. Затем он разделит его, возьмет первую часть и затем преобразует ее в целое.

+0

Хорошо, что решает мою проблему сортировки (легко исправить) спасибо! :) Но мне также нужно изменить его, чтобы читать и писать из и в файл соответственно. –

+0

Я считаю, что никаких других изменений не требуется. Что не сделано с этим * fix *? – JuniorCompressor

+0

Когда я сказал 'highscores.append (wins)', который помещает wins (который является int) в массив, мне также нужно добавить переменную, называемую именем в качестве строки в массив, как добавить это? Редактирование вопроса теперь будет более конкретным. –

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