タプルを含む次のタプルがあります。
MY_TUPLE = (
('A','Apple'),
('C','Carrot'),
('B','Banana'),
)
このタプルを、内部タプルに含まれる2番目の値に基づいてソートしたいと思います(つまり、A、B、CではなくApple、Carrot、Bananaをソートします)。
何かご意見は?
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]))
仕分けミニ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)]
お役に立てれば。
sorted(my_tuple, key=lambda tup: tup[1])
つまり、ソートしているタプルの 2 つの要素を比較する場合、key パラメーターとして渡された関数の戻り値に基づいてソートします。
このコードを使用して同じことを達成しましたが、あなたの提案は素晴らしいです。ありがとう!
templist = [ (line[1], line) for line in MY_TUPLE ]
templist.sort()
SORTED_MY_TUPLE = [ line[1] for line in templist ]