Вопрос

Я пишу сценарий 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]

Разве сортировка не позаботится об этом?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top