1
>>> 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')]
4

2 に答える 2

7

キーとして任意の機能を提供できます。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)

長い道のりでそれを書き出すことの1つの利点は、変わった名前のテストケースを書くのが簡単になることです。特別な場合に対処しなければならない場合にも便利です。

Pythonが十分に新しい場合は、Unicodeを適切に処理するため、str.casefold代わりに使用する必要があります。str.lower

于 2013-02-14T00:47:49.453 に答える
2
>>> l = [(1.23, 'Smith'), (2.34, 'Jones'), (3.45, 'de la Smith')]
>>> sorted(l, key=lambda tup: tup[1].lower())
[(3.45, 'de la Smith'), (2.33, 'Jones'), (1.23, 'Smith')]
于 2013-02-14T00:48:07.530 に答える