按特定名称对列表进行排序

时间:2018-06-10 23:30:19

标签: python

我有一个包含这样的链接的列表:

my_list = ['google.com', 'wikipedia.org/musics', 'facebook.com', 'wikipedia.org/Elon_Musk', 'fb.com']

我想首先将包含单词“wikipedia”的网址放在这个列表中,如下所示:

my_list = ['wikipedia.org/Elon_Musk', 'wikipedia.org/musics', 'facebook.com', 'google.com', 'fb.com']

谢谢,

6 个答案:

答案 0 :(得分:1)

试试这个:

my_list = ['google.com', 'wikipedia.org/musics', 'facebook.com', 'wikipedia.org/Elon_Musk', 'fb.com']
print(list(reversed(sorted(sorted(my_list,key=lambda x: 'wikipedia' not in x),key=lambda x: len(x)))))

输出:

['wikipedia.org/Elon_Musk', 'wikipedia.org/musics', 'facebook.com', 'google.com', 'fb.com']

答案 1 :(得分:0)

如果你想对URL的每个进行排序(按维基百科排序,然后对其他排序),你可以这样做:

sorted(my_list, key = lambda x: 'a' + x if 'wikipedia' in x else 'b' + x)

分割两种网址:维基百科的'a',其他网址的'b'a位于b之前,每个子列表也会排序。打印输出

['wikipedia.org/Elon_Musk', 'wikipedia.org/musics', 'facebook.com', 'fb.com', 'google.com']

答案 2 :(得分:0)

另一种方法(只是为了记住过滤功能):

my_list = ['google.com', 'wikipedia.org/musics', 'facebook.com', 'wikipedia.org/Elon_Musk', 'fb.com']
new_list = list(filter(lambda x: 'wikipedia' in x, my_list))+list(filter(lambda x: 'wikipedia' not in x, my_list))

答案 3 :(得分:0)

如果你想要维基百科排序那么

my_list = ['google.com', 'wikipedia.org/musics', 'facebook.com', 'wikipedia.org/Elon_Musk', 'fb.com']
list(sorted(my_list, key=lambda e: "00"+e if "wikipedia" in e else e))

答案 4 :(得分:0)

使用tuple排序,您可以首先使用以'wikipedia'开头的字符串,然后按字母顺序断开关系。

代码

my_list = ['google.com', 'wikipedia.org/musics',
           'facebook.com', 'wikipedia.org/Elon_Musk', 'fb.com']

new_list = sorted(my_list, key= lambda url: (-url.startswith('wikipedia'), url))

输出

['wikipedia.org/Elon_Musk', 'wikipedia.org/musics', 'facebook.com', 'fb.com', 'google.com']

答案 5 :(得分:0)

my_list = ['google.com', 'wikipedia.org/musics',
           'facebook.com', 'wikipedia.org/Elon_Musk', 'fb.com']

new_list = sorted(my_list, key= lambda url: (-url.startswith('wikipedia'), url))