排序列表中包含称呼语的元素?

2024-04-25 12:26:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含称呼语的字符串列表。我怎样才能根据姓名(在称呼之后——先生、女士、太太)以pythonic的方式对列表进行排序?你知道吗

我曾尝试根据“.”字符拆分列表元素,并对名称进行排序,但无法获得排序名称的称呼。你知道吗

names = ["Mr.usman", "Mrs.obama", "Mr.Albert"]
sorted_list = sorted([i.split('.')[1] for i in names])

例如["Mr.usman", "Mrs.obama", "Mr.Albert"]应该像["Mr.Albert", "Mrs.obama", "Mr.usman"]

非常感谢您的帮助。你知道吗


Tags: 字符串名称列表names排序pythonic姓名mr
2条回答

你可以这样做:

names = ['Mr.Osama', 'Mrs.Usman', 'Mr.Ali', 'Mrs.Ghani']
sortedList = sorted(names, key=lambda elem: elem[3:] if 'Mr.' in elem else elem[4:])
print('Sorted list:', sortedList)

您不应该对被操纵的列表进行排序,您可以指定key=...参数来确定要排序的内容,例如:

sorted_list = sorted(names, key=lambda n: n.split('.', 2)[1].casefold())

这将产生:

>>> sorted(names, key=lambda n: n.split('.', 2)[1].casefold())
['Mr.Albert', 'Mrs.obama', 'Mr.usman']

.casefold()用于进行不区分大小写的比较,这是问题示例输出所建议的。如果需要区分大小写的比较,可以将其删除。你知道吗

相关问题 更多 >