由于“TypeError:一元操作数类型错误 -:'str'”异常,下面的代码将失败,但它说明了我想要实现的目标。
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