1

我有一个包含称呼的字符串列表。如何以 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"]

非常感谢任何帮助。

4

2 回答 2

5

您不应该对操作列表进行排序,您可以指定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()用于进行不区分大小写的比较,您的问题示例输出表明了这一点。如果您想要区分大小写的比较,您可以删除它。

于 2019-08-20T08:20:51.157 回答
3

你可以这样做:

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)
于 2019-08-20T08:20:15.520 回答