2016-03-03 2 views
0

Я пытаюсь сортировать список, который я импортировал из файла в Python, однако мне не повезло, кто-нибудь знает, что я делаю неправильно?Сортировка проблемы в Python

fr = open("database_results\Class_" + option + ".txt", 'r') 
lines = [line for line in fr if line.strip()] 
fr.close() 
lines.sort(key=int) 
fw = open("database_results\Class_" + option + ".txt", 'w') 
fw.writelines(lines) 
print(lines) 
print("ALERT: File successfully sorted numerically!") 

Причина я расщеплении линий, как это происходит потому, что данные хранятся как это в базе данных:

[Name: 'John Smith' Score: '7'] 
[Name: 'Mitchel Jones' Score: '5'] 

Я хочу файл быть отсортированы так, люди, которые получили самый высокий оценка попадает в начало списка. В приведенном выше примере это будет отформатировано отлично, потому что у Джона более высокий балл, чем у Митчела.

+2

Остановить откат назад, * Спасибо заранее * не требуется. Здесь здесь шум. –

+0

О, ладно, я не хотел быть грубым. –

+0

Как выглядят реальные линии? –

ответ

2

1) Вы используете неправильный аргумент ключа. Key указывает, какая часть каждого элемента в вашем списке используется для сортировки. В моем примере я поставляет анонимную функцию, которая говорит, что для каждого элемента в l, используйте значение по индексу 0 для определения порядка сортировки

l = [ 
    [3,1,2], 
    [1,5,2], 
    [0,9,3], 
    [2,5,2] 
] 
l.sort(key=lambda x : x[0]) 
print l # prints [[0, 9, 3], [1, 5, 2], [2, 5, 2], [3,1,2]] 

2) Для того, чтобы сделать свой вид, вы будете вероятно, необходимо выполнить разделение на каждую строку, определить, какой индекс находится в рейтинге, и передать его в int. Это должно сделать вид:

lines.sort(reverse=True, key=lambda x : int(x.strip().split('Score: ')[1].replace(']', '').replace('"', "").replace("'", "")))

Вот что происходит:

  1. Разделить строку на счет, поэтому мы вернемся ["[Name: Blah Blah", "10]"]
  2. Обираем элемент из нового списка, где оценка является сидя (индекс 1)
  3. Замените символы], 'и ", чтобы мы не пропустили наш ввод
  4. Сдать счет в номер для nume ric sorting

3) Возможно, это не лучшая идея написать из того же файла, который вы только что читали. Было бы лучше положить его где-то вроде "database_results\Class_{0}_sorted.txt".format(option)"

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