Питон, сортировка - PullRequest
       10

Питон, сортировка

1 голос
/ 10 сентября 2010

name | num | num | num | num name | num | num | num | num name | num | num | num | num

Как отсортировать этот список по полю нуждающегося мной (2,34,5)Извините за мою версию.

Обновление

Ввод:

str|10|20
str|1|30

Сортировка по первому полю (1,10):

str|1|30
str|10|20

Сортировка по второму полю (20,30):

str|10|20
str|1|30

Ответы [ 3 ]

3 голосов
/ 10 сентября 2010

Я бы использовал функцию модуля оператора "itemgetter" вместо лямбда-функций. Это быстрее и позволяет несколько уровней сортировки.

from operator import itemgetter

data = (line.split('|') for line in input.split('\n')) 
sort_index = 1
sorted(data, key=itemgetter(sort_index))
2 голосов
/ 10 сентября 2010

Вы можете сортировать по определенной клавише , которая сообщает функции сортировки, как оценивать записи, подлежащие сортировке, то есть как мы решаем, какая из двух записей больше В этом случае мы сначала разделим каждую строку по конвейеру, используя split (например, "a|b|c".split("|") возвращает ["a", "b", "c"]), а затем возьмем любую запись, какую захотите.

Сортировка по первому полю "num":

sorted(lines, key=(lambda line : line.split("|")[1])

, где lines - список строк, которые вы упомянули в вопросе. Чтобы отсортировать по другому полю, просто измените число в скобках.

1 голос
/ 10 сентября 2010

Предполагая, что вы начинаете со списка строк, начните с разделения каждой строки на список:

data = [line.split('|') for line in input]

Затем сортируйте по нужному индексу:

sort_index = 1
sorted_data = sorted(data, key=lambda line: int(line[sort_index]))

Руководство по сортировке Python 1008 * содержит гораздо больше информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...