У меня есть два списка. Сначала один выглядит следующим образом:Nuke Python список объектов заказать по иному списку
passOrder = [
'direct_diffuse',
'direct_specular',
'direct_specular_2',
'indirect_diffuse',
'indirect_specular',
'indirect_specular_2',
'refraction',
'reflection',
'emission',
'sss'
]
, а другой представляет собой список объектов, - в этом случае Nuke узлы:
nodes = nuke.selectedNodes()
Я пытаюсь сравнить параметр имени каждого узла со списком passOrder и расположите их в порядке, указанном в passOrder. Я попытался явно настроить indexndode index, но я думаю, что это невозможно, когда список пуст при запуске.
orderedNodes = []
for n in nodes:
for index, p in enumerate(passOrder):
if n['name'].value() == p:
orderedNodes.insert(index, n)
Я также попытался закрепить оба списка и отсортировать их - здесь не повезло. В принципе, я понятия не имею, как перебирать компонент n['name'].value()
при сортировке.
Это предпочтительнее, чем мое решение, если возможно, что 'nodes' будет содержать Nuke, имя которого не находится в' passOrder'. Хорошая защитная кодировка. – Kevin
@Kevin Спасибо! Фактически я видел ваше решение после того, как я разместил свой. –
@S. de Melo Спасибо за такое элегантное решение. Я пытаюсь ввести регулярное выражение в эту функцию для соответствия имени слоев, которое начинается с строк, заданных в passOrder, например. 'Direct_diffuse_layerName_2'. –