0

我正在编写一个 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

希望你们明白我的意思,任何帮助将不胜感激。干杯

4

3 回答 3

3

使用排序函数按长度排序:

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]
于 2008-10-30T10:24:35.883 回答
1

在 jython 赶上python 2.4之前,您不能将key参数用于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]
于 2008-10-30T10:33:41.777 回答
0

对它们进行排序不会解决这个问题吗?

于 2008-10-30T10:08:38.393 回答