【问题标题】:Sort the elements of list contains salutation in it?排序列表中的元素包含称呼吗?
【发布时间】:2019-12-25 10:03:51
【问题描述】:

我有一个包含称呼的字符串列表。如何以 Python 方式根据姓名(称呼后 - 先生、女士、夫人)对列表进行排序?

我尝试根据'.'拆分列表的元素字符并对名称进行排序,但无法获得排序名称的称呼。

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"]

非常感谢任何帮助。

【问题讨论】:

    标签: python


    【解决方案1】:

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

    【讨论】:

      【解决方案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)
      

      【讨论】:

      • 根据问题中的数据,我们有以大写和小写开头的名称。我愿意:sorted(names, key=lambda name:name.lower().split('.')[1])
      • @MalikFaiq 在这种情况下是 sorted(names, key=lambda name:name.lower().split('.')[1]),这将是一个很好的解决方案。
      • @OsamaRasheed:请使用casefold() 而不是lower()stackoverflow.com/questions/45745661/…
      猜你喜欢
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      • 2023-01-28
      • 2022-12-04
      • 1970-01-01
      • 2021-02-19
      相关资源
      最近更新 更多