如何排序Python对象

dan*_*dee 11 python list nested-lists python-3.x

我有一个嵌套列表,其中包含不同的对象,它们是嵌套列表中的重复对象对象,我正在尝试删除它们但我一直在

TypeError: unorderable types: practice() < practice()

我知道这个错误是由我尝试使用对象而不是整数引起但我不知道如何删除重复项这里是我试过的

class practice:
    id = None

    def __init__(self,id):
        self.id = id

a = practice('a')
b = practice('b')
c = practice('c')
d = practice('d')
e = practice('e')
f = practice('f')

x = [[a,b],[c,d],[a,b],[e,f],[a,b]]

unique_list = list()
for item in x:
    if sorted(item) not in unique_list:
        unique_list.append(sorted(item))

print(unique_list)
Run Code Online (Sandbox Code Playgroud)

Pad*_*ham 6

如果要按id比较对象:

class practice:
    id = None

    def __init__(self,id):
        self.id = id

    def __lt__(self, other):
        return other.id > self.id

    def __gt__(self, other):
        return self.id > other.id

unique_list = list()
for item in x:
    if sorted(item) not in unique_list:
        unique_list.append(sorted(item))

print(unique_list)
[[<__main__.practice object at 0x7fe87e717c88>, <__main__.practice object at 0x7fe87e717cc0>],
 [<__main__.practice object at 0x7fe86f5f79e8>, <__main__.practice object at 0x7fe86f589278>],
 [<__main__.practice object at 0x7fe86f589be0>, <__main__.practice object at 0x7fe86f589c18>]]
Run Code Online (Sandbox Code Playgroud)

根据您要实现的所有丰富的比较排序方法的功能, 您可以使用functools.total_ordering,您只需要定义其中一个方法,它将负责其余的

from functools import total_ordering
@total_ordering
class practice:
    id = None

    def __init__(self,id):
        self.id = id

    def __lt__(self, other):
        return other.id > self.id

    def __eq__(self, other):
        return self.id == other.id
Run Code Online (Sandbox Code Playgroud)

给定一个定义一个或多个丰富的比较排序方法的类,这个类装饰器提供其余的.这简化了指定所有可能的丰富比较操作所涉及的工作:

这个类必须定义之一__lt__(),__le__(),__gt__(),或__ge__().此外,该课程应该提供一种__eq__()方法.