python 中的订购链接
Ordering links in python
我有一个包含一些链接的列表:["http://link1.rar", "http://link1.rev","http://link2.rar", “http://link2.rev”]
有没有办法对它们进行排序,以便看起来像:
["http://link1.rar", "http://link2.rar", "http://link1.rev", "http://link2.rev"]
我试过这个:
def order(x):
if "rar" not in x:
return x
else:
return ""
new_links = sorted(links, key=order)
但在这种方式下,rev 链接是从最高排序的。
你要根据多个标准来解决:第一,文件扩展名;然后,整个字符串。
根据多个条件进行排序的常用技巧是使用元组作为键。元组按字典顺序排序,这意味着第一个条件先比较;如果平局,则比较第二个标准。
例如,下面的键 returns 一个元组,例如 (False, 'http://link1.rar')
或 (True, 'http://link1.rev')
:
new_links = sorted(links, key=lambda x: ('rar' not in x, x))
或者,您可以使用 str.rsplit
拆分最后一个 '.'
上的字符串并得到一个元组,例如 ('http://link1', 'rev')
。既然你希望扩展是第一个标准,那么使用切片 [::-1]
来反转元组的顺序:
new_links = sorted(links, key=lambda x: x.rsplit('.', maxsplit=1)[::-1])
请注意,在最后一个 '.'
上使用 rsplit('.', maxsplit=1)
拆分有点麻烦。如果文件名包含双重扩展名,例如 '.tar.gz'
,则只会隔离最后一个扩展名。
最后一点要考虑:字符串中的数字。只要您的字符串仅包含单个数字,例如 '1'
或 '2'
,就可以按预期对字符串进行排序。但是,如果你在那里的某个地方有一个 'link10'
,顺序可能不是你期望的顺序:按字典顺序,'link10'
出现在 'link2'
之前,因为 '10'
的第一个字符是 '1'
。在那种情况下,我建议你参考这个相关问题:Is there a built in function for string natural sort?
我有一个包含一些链接的列表:["http://link1.rar", "http://link1.rev","http://link2.rar", “http://link2.rev”] 有没有办法对它们进行排序,以便看起来像: ["http://link1.rar", "http://link2.rar", "http://link1.rev", "http://link2.rev"]
我试过这个:
def order(x):
if "rar" not in x:
return x
else:
return ""
new_links = sorted(links, key=order)
但在这种方式下,rev 链接是从最高排序的。
你要根据多个标准来解决:第一,文件扩展名;然后,整个字符串。
根据多个条件进行排序的常用技巧是使用元组作为键。元组按字典顺序排序,这意味着第一个条件先比较;如果平局,则比较第二个标准。
例如,下面的键 returns 一个元组,例如 (False, 'http://link1.rar')
或 (True, 'http://link1.rev')
:
new_links = sorted(links, key=lambda x: ('rar' not in x, x))
或者,您可以使用 str.rsplit
拆分最后一个 '.'
上的字符串并得到一个元组,例如 ('http://link1', 'rev')
。既然你希望扩展是第一个标准,那么使用切片 [::-1]
来反转元组的顺序:
new_links = sorted(links, key=lambda x: x.rsplit('.', maxsplit=1)[::-1])
请注意,在最后一个 '.'
上使用 rsplit('.', maxsplit=1)
拆分有点麻烦。如果文件名包含双重扩展名,例如 '.tar.gz'
,则只会隔离最后一个扩展名。
最后一点要考虑:字符串中的数字。只要您的字符串仅包含单个数字,例如 '1'
或 '2'
,就可以按预期对字符串进行排序。但是,如果你在那里的某个地方有一个 'link10'
,顺序可能不是你期望的顺序:按字典顺序,'link10'
出现在 'link2'
之前,因为 '10'
的第一个字符是 '1'
。在那种情况下,我建议你参考这个相关问题:Is there a built in function for string natural sort?