Python 按特定名称对列表排序

Python 按特定名称对列表排序,python,Python,我有一个包含如下链接的列表: my_list = ['google.com', 'wikipedia.org/musics', 'facebook.com', 'wikipedia.org/Elon_Musk', 'fb.com'] my_list = ['wikipedia.org/Elon_Musk', 'wikipedia.org/musics', 'facebook.com', 'google.com', 'fb.com'] 我想通过将包含“wikipedia”一词的URL放在第一位

我有一个包含如下链接的列表:

my_list = ['google.com', 'wikipedia.org/musics', 'facebook.com', 'wikipedia.org/Elon_Musk', 'fb.com']
my_list = ['wikipedia.org/Elon_Musk', 'wikipedia.org/musics', 'facebook.com', 'google.com', 'fb.com']
我想通过将包含“wikipedia”一词的URL放在第一位对列表进行排序,如下所示:

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

试试这个:

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']
如果要对每种URL进行排序(先对维基百科中的URL进行排序,然后对其他URL进行排序),可以执行以下操作:

sorted(my_list, key = lambda x: 'a' + x if 'wikipedia' in x else 'b' + x)
这将两种URL分开:
'a'
用于Wikipedia,
'b'
用于其他URL。
a
s位于
b
s之前,并且每个子列表也被排序。打印输出是

['wikipedia.org/Elon_Musk', 'wikipedia.org/musics', 'facebook.com', 'fb.com', 'google.com']
['wikipedia.org/Elon_Musk', 'wikipedia.org/musics', 'facebook.com', 'fb.com', 'google.com']
另一种方法(只需记住过滤器功能):


如果你想把维基百科也分类的话

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))

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

密码 输出
这不是正确的输出
wikipedia.org/Elon_Musk
应该在
wikipedia.org/musics
之前(参见OP的期望输出)。@Ajax1234编辑了我的answer@Ajax1234编辑答案again@U8-前进,这是个巧合。尝试类似于
'wikipedia.org/Elon'
的url,它将被错误地排序。为什么要依赖长度?基于两个条件的排序通常使用。另外,不要排序两次。当你可以在你的钥匙上加一个减号时,不要反转。很抱歉,这个解决方案在很多方面都不起作用。您的要求是否只是其中包含
'wikipedia'
的URL必须先运行?还有其他排序要求吗?按包含
'wikipedia'
的URL排序后,什么决定了排序顺序?例如,你能解释一下订购
'facebook.com',google.com',fb.com'
@jpp背后的逻辑吗?我想是这样的,因为
facebook.com
有12个字符,
google.com
有10个字符,
fb.com
有6个字符。这是如何解决问题的。使用格式化工具使文章更具可读性。代码块应类似于代码块。如果需要,请使用粗体斜体。您能解释一下,这和@Olivier Melançon的回答有什么不同吗?
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))