12

タプルを含む次のタプルがあります。

MY_TUPLE = (
    ('A','Apple'),
    ('C','Carrot'),
    ('B','Banana'),
)

このタプルを、内部タプルに含まれる2番目の値に基づいてソートしたいと思います(つまり、A、B、CではなくApple、Carrot、Bananaをソートします)。

何かご意見は?

4

4 に答える 4

25
from operator import itemgetter

MY_SORTED_TUPLE = tuple(sorted(MY_TUPLE, key=itemgetter(1)))

またはなしitemgetter:

MY_SORTED_TUPLE = tuple(sorted(MY_TUPLE, key=lambda item: item[1]))
于 2008-10-21T17:44:08.207 に答える
7

仕分けミニHOW TOより

多くの場合、str.lower() など、ニーズに合ったビルトインがあります。operator モジュールには、この目的に役立つ多くの関数が含まれています。たとえば、operator.itemgetter() を使用して、2 番目の要素に基づいてタプルを並べ替えることができます。

>>> import operator 
>>> L = [('c', 2), ('d', 1), ('a', 4), ('b', 3)]
>>> map(operator.itemgetter(0), L)
['c', 'd', 'a', 'b']
>>> map(operator.itemgetter(1), L)
[2, 1, 4, 3]
>>> sorted(L, key=operator.itemgetter(1))
[('d', 1), ('c', 2), ('b', 3), ('a', 4)]

お役に立てれば。

于 2008-10-21T17:45:56.563 に答える
2
sorted(my_tuple, key=lambda tup: tup[1])

つまり、ソートしているタプルの 2 つの要素を比較する場合、key パラメーターとして渡された関数の戻り値に基づいてソートします。

于 2008-10-21T17:45:12.073 に答える
-2

このコードを使用して同じことを達成しましたが、あなたの提案は素晴らしいです。ありがとう!

templist = [ (line[1], line) for line in MY_TUPLE ] 
templist.sort()
SORTED_MY_TUPLE = [ line[1] for line in templist ]
于 2008-10-21T17:52:01.467 に答える