Skip to main content
 首页 » 编程设计

python之根据主列表对类实例列表进行排序

2025年05月04日11langtianya

我有一个这样的类实例列表:

classes = [A(someval), B(someval), C(someval)] 

我想使用“主”列表对这个列表进行排序。

master_list = [B, A] 

如果存在 B 和 A,这将首先对列表进行排序,并且始终按照 master_list 中指定的顺序进行排序。这些类是字段验证器,所以我希望每个类都不会超过一个,但永远无法确定。

任何其他类实例都可以按照它们出现的任何顺序出现。

我希望能够根据另一个主列表将一些实例放在列表的末尾,但我怀疑最好的做法是将列表反转并再次做同样的事情。

但是我该怎么做呢?

编辑:子类并不重要,因为这些验证器类只有一个可调用方法,而且通常非常简单。我还没有遇到过子类验证器,我试图想象一个它会有益的场景,但我做不到。

请您参考如下方法:

您可以使用 index列表类的功能。这是一个简单的例子:

class A: pass 
class B: pass 
class C: pass 
 
classes = [A(), B(), C()] 
master_list = [B, A] 
 
def sorter(instance): 
    # get the type of the object 
    c = instance.__class__ 
    # if it is in the master_list, use its index, otherwise put it at the end 
    return master_list.index(c) if c in master_list else len(master_list) 
 
final_list = sorted(classes, key=sorter) 

现在是最终名单

[<__main__.B instance at 0x023348C8>, <__main__.A instance at 0x01EE64B8>, <__main__.C instance at 0x023348F0>]