0
以下のコードは、 "TypeError:unary - : 'str'例外のオペランドタイプが不良ですが、達成しようとしていることを示しています。SortedContainers.SortedListWithKeyを複数のソート順で実装する方法はありますか
from sortedcontainers import SortedListWithKey
contacts = SortedListWithKey(key=lambda val:(val.FirstName, -val.LastName))
class Person(object):
pass
p1 = Person()
p1.FirstName = 'Amy'
p1.LastName = 'Obama'
p2 = Person()
p2.FirstName = 'Bob'
p2.LastName = 'Obama'
p3 = Person()
p3.FirstName = 'Bob'
p3.LastName = 'Trump'
p4 = Person()
p4.FirstName = 'Amy'
p4.LastName = 'Trump'
contacts.add(p1)
contacts.add(p2)
contacts.add(p3)
contacts.add(p4)
for p in contacts:
print(p.FirstName, p.LastName)
意図出力は、次のとおり
Amy Trump
Amy Obama
Bob Trump
Bob Obama
Person.LastNameが数値型のメンバである場合、上記のコードは動作します。
私はSortedListのを実装するだけでなく、内蔵の非分類されたリストされていない場合は、私は単に
contacts.sort(key = operator.itemgetter(0))
contacts.sort(key = operator.itemgetter(1), reverse=True)
を行うことができます。しかし、このオプションは、私の状況は可能ではありません。
SortedContainersウェブサイト:それを行うには http://www.grantjenks.com/docs/sortedcontainers/index.html
ある '' reverse'引数をサポートしてSortedListWithKey'していますか?はいの場合は、2回の並べ替え呼び出しでこれを行うことができます。 –
@COLDSPEED:残念ながら、それはしません。 Sort()メソッドは常にソートされているため、ソートもサポートされていません。 – Jimbo