我有一个这样的类实例列表:
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>]
