Skip to main content
 首页 » 编程设计

Python:按姓氏对元组进行排序并处理小写首字母

2025年05月04日10think

>>> from operator import itemgetter 
>>> l = [(1.23, 'Smith'), (2.34, 'Jones'), (3.45, 'de la Smith')] 
>>> ol = sorted(l, key=itemgetter(1)) 
>>> ol 
[(2.34, 'Jones'), (1.23, 'Smith'), (3.45, 'de la Smith')] 

如何使用多个列表推导式获得下面的列表而不会有一些困惑?

[(3.45, 'de la Smith'), (2.34, 'Jones'), (1.23, 'Smith')] 

请您参考如下方法:

您可以提供任何函数作为键。 itemgetter 只对非常简单的情况有用

>>> L = [(1.23, 'Smith'), (2.34, 'Jones'), (3.45, 'de la Smith')] 
>>> sorted(L, key=lambda x:x[1].lower()) 
[(3.45, 'de la Smith'), (2.34, 'Jones'), (1.23, 'Smith')] 

对于更复杂的排序,您可能希望以通常的方式编写函数

def item_to_sort_key(item): 
    n, name = item 
    return name.lower() 
 
sorted(L, key=item_to_sort_key) 

把它写得很长的一个好处是它更容易为不常见的名字编写测试用例。如果您必须开始处理特殊情况,它也会很方便。

如果您的 Python 足够新,您将拥有 str.casefold应该使用它而不是 str.lower 因为它可以正确处理 unicode