Сортировка списка URL по длине в Jython
Вопрос
Я пишу сценарий Jython для сортировки списка URL-адресов.
У меня есть список, который выглядит следующим образом:
http://www.domain.com/folder1/folder2/|,1
http://www.domain.com/folder1/|,1
http: //www.domain.com/folder1/folder2/folder3/ |, 1
http://www.domain.com/folder1/|,1
http://www.domain.com/folder1/folder2/|,1
http://www.domain.com/folder1/folder2/|,1
http: //www.domain.com/folder1/folder2/folder3/ |, 1
Канал и запятая отделяют путь от количества файлов, которые находятся под этим путем. Возможно ли как-то использовать Jython для упорядочения URL-адресов по длине, чтобы в итоге это выглядело как в следующем списке:
http://www.domain.com/folder1/|,1
http://www.domain.com/folder1/|,1
http://www.domain.com/folder1/folder2/|,1
http://www.domain.com/folder1/folder2/|,1
http://www.domain.com/folder1/folder2/|,1
http: //www.domain.com/folder1/folder2/folder3/ |, 1
http: //www.domain.com/folder1/folder2/folder3/ |, 1
Надеюсь, вы, ребята, поняли, о чем я, любая помощь будет принята с благодарностью. Приветствия
Решение
Сортировка по длине с использованием функции сортировки:
urls.sort(lambda a, b: cmp(len(a), len(b)))
Для производительности некоторые могут предпочесть шаблон decorate-sort-undecorate:
urllengths= [(len(url), url) for url in urls]
urllengths.sort()
urls= [url for (l, url) in urllengths]
Или в виде одной строки:
urls= zip(*sorted((len(url), url) for url in urls))[1]
Другие советы
Пока jython не поймает до python 2.4 , вы не можете использовать аргумент key для list.sort () :
mylist.sort(key=len)
Итак, как и в старые добрые времена, у нас есть decorate-sort-undecorate идиома. Чтобы отсортировать mylist
по длине элемента, мы генерируем кортежи decor_list
из (len (item), item)
, сортируем их и, наконец, удаляем предметы назад:
decorated_list = zip(map(len, mylist), mylist)
decorated_list.sort()
sorted_list = [i[1] for i in decorated_list]
Разве сортировка не позаботится об этом?