2016-01-20 5 views
2

У меня есть файл, который имеет от 1 до 4 слов в строке, и я хочу сортировать по третьему слову в строке. Следующий код не работает, если в слоте s [2] нет слова. Есть ли что-нибудь, что я могу сделать, чтобы все еще сортировать все? Благодаряpython сортировать по последнему слову в строке, разные строки длины

with open('myfile.txt') as fin: 
lines = [line.split() for line in fin] 
lines.sort(key=lambda s: s[2]) 
+0

добавить 'try' и' except' для сортировочной строки – Arman

ответ

3

Вы можете попробовать использовать синтаксис ломтика

with open('myfile.txt') as fin: 
    lines = [line.split() for line in fin] 
    lines.sort(key=lambda s: s[2:3]) # will give empty list if there is no 3rd word 
+0

Я буду отмечать это право, так как он выполнил свою работу, но теперь у меня проблема, пустые значения отсортированы сверху, (empty, a, ..., z) есть ли что-нибудь, что я могу сделать, чтобы положить пустой конец (a, ..., z, empty) Спасибо! –

+0

@KirilAlexBallow - lines.sort (key = lambda s: s [2: 3] или ["z" * 100]) # не проверено –

1

Попробуйте это:

x.sort(key=lambda s: s[2] if len(s) > 2 else ord('z')+1) 

Таким образом, если нет s [2] возвращает следующую вещь после 'z' (предположительно последнее значение символа ascii в ваших строках). Не стесняйтесь изменять ord ('z') + 1 на какое-то другое большое число

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