Ich habe zwei Listen. Zuerst sieht wie folgt aus:Nuke Python Liste der Objekte Reihenfolge basierend auf anderen Liste
passOrder = [
'direct_diffuse',
'direct_specular',
'direct_specular_2',
'indirect_diffuse',
'indirect_specular',
'indirect_specular_2',
'refraction',
'reflection',
'emission',
'sss'
]
und das andere ist eine Liste von Objekten - in diesem Fall Nuke Knoten:
nodes = nuke.selectedNodes()
Ich versuche, jeden Knoten Name des Parameters mit passOrder Liste zu vergleichen und Ordne sie in der Reihenfolge an, die in passOrder angegeben ist. Ich habe versucht, den orderedNodes-Index explizit einzurichten, aber ich denke, es ist nicht möglich, wenn die Liste beim Start leer ist.
orderedNodes = []
for n in nodes:
for index, p in enumerate(passOrder):
if n['name'].value() == p:
orderedNodes.insert(index, n)
Ich habe auch versucht, beide Listen zu zippen, und sortiere sie - kein Glück hier. Grundsätzlich habe ich keine Ahnung, wie man über n['name'].value()
Komponente beim Sortieren iteriert.
Dies ist meiner Lösung vorzuziehen, wenn es möglich ist, dass 'nodes' einen Nuke enthält, dessen Name nicht in' passOrder' steht. Nette defensive Codierung. – Kevin
@Kevin Danke! Tatsächlich habe ich deine Lösung gesehen, nachdem ich meine veröffentlicht habe. –
@S. de Melo Danke für diese elegante Lösung. Ich versuche, Regex in diese Funktion zu injizieren, um Layernamen, die mit Strings beginnen, die in passOrder, z. 'direct_diffuse_layerName_2'. –