我正在编写一个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
希望你们明白我的意思,任何帮助都会受到赞赏。干杯
答案 0 :(得分: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]
答案 1 :(得分: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]
答案 2 :(得分:0)
不排序他们会照顾这个吗?