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