Python 3でカスタム比較関数を使用するにはどうすればいいですか? 質問する

Python 3でカスタム比較関数を使用するにはどうすればいいですか? 質問する

Python 2.x、sorted関数と.sort関数にカスタム関数を渡すことができました

>>> x=['kar','htar','har','ar']
>>>
>>> sorted(x)
['ar', 'har', 'htar', 'kar']
>>> 
>>> sorted(x,cmp=customsort)
['kar', 'htar', 'har', 'ar']

なぜなら、私の言語では、子音はこの順序で来る

"k","kh",....,"ht",..."h",...,"a"

しかし、Python 3.xcmpキーワードを渡せなかったようです

>>> sorted(x,cmp=customsort)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'cmp' is an invalid keyword argument for this function

代替手段はありますか、それとも独自のソート関数も記述する必要がありますか?

注: 「k」、「kh」などを使用して簡略化しました。実際の文字は Unicode であり、さらに複雑で、子音の前後に母音が来ることもあります。カスタム比較関数を実行したので、その部分は問題ありません。唯一の問題は、カスタム比較関数を sorted または .sort に渡すことができなかったことです。

ベストアンサー1

keyキーワードを使用して関数tools.cmp_to_key比較関数を変換するには:

sorted(x, key=functools.cmp_to_key(customsort))

おすすめ記事