2017-03-16 12 views
1

のPython 3へのPython 2から、このリストのソート機能を変換します:どのように私はポートにしようとすると、それは、Python 2 KEY2</p> <p>を求めてエラーを出し、それ

def SortItems(self,sorter=cmp): 
    items = list(self.itemDataMap.keys()) 
    items.sort(sorter) 
    self.itemIndexMap = items 
    self.Refresh() 

のPython 3:

try: 
    cmp 
except NameError: 
    def cmp(x, y): 
     if x < y: 
      return -1 
     elif x > y: 
      return 1 
     else: 
      return 0 

def SortItems(self,sorter=cmp): 
    items = list(self.itemDataMap.keys()) 
    items.sort(key=sorter) 
    self.itemIndexMap = items 
    self.Refresh() 

エラーを取得:

items.sort(key=sorter) 
TypeError: __ColumnSorter() missing 1 required positional argument: 'key2' 

ラムダ関数が2番目の引数を必要としているようです どのように動作させるか考えていますか?私は、整数ではない文字列

をソートしていますので、おそらく

items= sorted(items, key=cmp_to_key(locale.strcoll)) 
TypeError: strcoll() argument 1 must be str, not int 

どのように私はそれがint型のために動作させるん:

def SortItems(self): 
    import locale 
    items = list(self.itemDataMap.keys()) 
    items= sorted(items, key=cmp_to_key(locale.strcoll)) 
    self.itemIndexMap = items 
    self.Refresh() 

取得エラー:

もfunctools.cmp_to_keyを試してみましたか?

答えて

1

cmpkeyは基本的に異なります。ただし、使用できる変換機能はfunctools.cmp_to_key()です。ドキュメントのpython3のはlist.sortから

+0

は、それを試みた別のエラーが発生します。 TypeError:strcoll()引数1は、intではなくstrでなければなりません。私は整数をソートしています。どのように整数のためにそれを使用する任意のアイデア? – olekb

+0

何ですか?なぜあなたは 'strcoll'関数を使って整数を比較していますか?私はあなたが何をしようとしているのか理解していません。 –

0

():

sort() accepts two arguments that can only be passed by keyword (keyword-only arguments)

key specifies a function of one argument that is used to extract a comparison key from each list element (for example, key=str.lower).

、キー呼び出し可能なだけPY3に、単一の引数を取ります。したがって、この場合には

items.sort(int)、または同等items.sort(lambda x: x)

を行うと、昇順にint型のリストをソートします。

一般にcmpは、listの各要素 の比較プロパティを返す必要があります。

def cmp(x): 
    # code to compute comparison property or value of x 
    # eg. return x % 5 

また、あなた python2のCMP機能を変換することができます:

The functools.cmp_to_key() utility is available to convert a 2.x style cmp function to a key function.

https://docs.python.org/3/library/stdtypes.html#list.sort

関連する問題