Сортировка списка URL по длине в Jython - PullRequest
0 голосов
/ 30 октября 2008

Я пишу 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

Надеюсь, вы, ребята, поняли, о чем я, любая помощь будет принята с благодарностью. Приветствия

Ответы [ 3 ]

3 голосов
/ 30 октября 2008

Сортировка по длине с использованием функции сортировки:

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]
1 голос
/ 30 октября 2008

Пока jython не поймает до python 2.4 , вы не можете использовать ключ аргумент для list.sort () :

mylist.sort(key=len)

Итак, как и в старые добрые времена, у нас есть идиома decorate-sort-undecorate . Чтобы отсортировать mylist по длине элемента, мы генерируем decorated_list из (len(item),item) кортежей, сортируем их и, наконец, отбрасываем элементы обратно:

decorated_list = zip(map(len, mylist), mylist)
decorated_list.sort()
sorted_list = [i[1] for i in decorated_list]
0 голосов
/ 30 октября 2008

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

...