これと同様の質問がありますが、代わりに次のようにタプルにリストが含まれています。
mytuple = (
["tomato", 3],
["say", 2],
["say", 5],
["I", 4],
["you", 1],
["tomato", 6],
)
これを並べ替える最も効率的な方法は何ですか?
ソートされたタプルを簡単に取得できます。
>>> sorted(mytuple)
[['I', 4], ['say', 2], ['say', 5], ['tomato', 3], ['tomato', 6], ['you', 1]]
これにより、リスト内の項目に基づいて並べ替えられます。最初の 2 つが一致する場合は、2 番目を比較します。
基準が異なる場合は、比較機能を提供できます。
更新:コメント者が指摘したように、これはリストを返します。次のように別のタプルを取得できます。
>>> tuple(sorted(mytuple))
(['I', 4], ['say', 2], ['say', 5], ['tomato', 3], ['tomato', 6], ['you', 1])
タプルをソートすることはできません。
できることは、タプルをソートしないsorted()を使用することですが、タプルからソートされたリストを作成します。ソートされたタプルが本当に必要な場合は、sorted からの戻り値をタプルとしてキャストできます。
mytuple = tuple(sorted(mytuple, key=lambda row: row[1]))
リストを作成してから破棄する (元のタプルも破棄する) ため、これはメモリの浪費になる可能性があります。タプルは必要ない可能性があります。リストから始めてソートする方がはるかに効率的です。
残念ながら、新しいタプルをインスタンス化する必要があります:
mytuple = sorted(mytuple)
トリックを行う必要があります。 sorted
ただし、タプルは返されません。tuple()
必要に応じて通話を折り返します。データセットが長い場合、これはコストがかかる可能性があります。
サブリストの 2 番目の要素を設定する必要がある場合はkey
、関数にパラメーターを使用できsorted
ます。そのためにはヘルパー関数が必要です。
mytuple = sorted(mytuple, key=lambda row: row[1])
その質問に対する受け入れられた回答 ( sorted(..., key=itemgetter(...))
) で使用されている手法は、この種のイテラブルで機能するはずです。ここに提示されたデータに基づいて、そこに提示された正確な解決策があなたが望んでいるものだと思います.