поиск как в экселе
Главная › Форумы › Задать вопрос › поиск как в экселе
- В этой теме 36 ответов, 6 участников, последнее обновление 7 лет, 2 месяца назад сделано Oleg.
-
АвторСообщения
-
вопрос этого же автора из динамо чата
Решение
АнонимНеактивированный10 ptsВопрос в развитие темы. А как модифицировать скрипт чтобы при нахождении идентичного вхождения из сравниваемого списка 1 со списком 2 в список 4 подставлялось значение из списка 3 соответствующее индексу совпавшего значения из списка 2, но в случае отсутствия сопоставления в список 4 подставлялось бы пустое строковое или численное значение.
Просто стою сейчас перед похожей проблемой: надо снять из параметров пространств номера помещений, потом пройтись вытащить из файла эксель некие параметры, которые при совпадении номера помещения из пространства с номером помещения из эксель файла будут тащить в другие параметры пространства расчетные значения, расположенные в соседних столбцах на этой же строке. Соответственно на выходе мне надо иметь список с длиной равной длине списка пространств, при условии что длина списка с номерами помещений из экселя может быть как длиннее, так и короче.
у вас есть:
список номеров пространств =[1,2,3…]
список из экселя с номерами помещений и некие соответствующие определенному номеру параметры – сгруппируйте их так : ([ номер помещения , параметр 1, параметр 2….] , [….]) затем извлекайте нужные параметры при совпадении номеров:
OUT=sorted([[i[1], i[2] ] for i in IN[0] for j in IN[1] if i[0]==j ])
если я вас неправильно понял, то лучше сделайте картинку из динамо какие списки исходные и какой нужен на выходе
АнонимНеактивированный10 ptsКартинка пока такого общего плана. Там суть проблемы в чем для меня сейчас – список номеров помещений/пространств снимаемый из модели и список номеров помещений получаемый из ревита могут не совпадать по длине и, как правило, список номеров пространств из модели всегда будет длиннее, но возможна и противоположная ситуация. В экселе номера помещений расположены по порядку, на обработку в динамо номера пространств из ревита подаются в хаотическом виде, так как их получил на вход нод. Мой главный затык сейчас в том что мне надо последовательно взять каждый номер пространства из списка параметров пространств, сопоставить его на предмет идентичности со списком номеров помещений из эксель файла, в случае удачного сопоставления взять из этого же эксель файла из соседних столбцов некое значение (будут и числовые и текстовые значения) по индексу совпадения, добавить это значение в новый список, который далее будет записываться в заданные параметры пространств, в случае отсутствия сопоставления в список должно подставляться пустое значение. На выходе я хочу получать список с длиной равный длине списка номеров пространств из ревита, в котором будут и значения и пустые строки, которые я буду писать в параметры пространств.
АнонимНеактивированный10 ptsМне виделось какая-то конструкция следующего вида, но пока при разных вариациях направления этой мысли у меня либо происходит перемножение сравниваемых списков, либо питон выдаёт ошибку что в сопоставляемом списке значения вышли за пределы диапазона. Порядок вложенности пробовал менять местами – ситуация не меняется.
единственное вылазит предупреждение, а так вроде выполняется задача
АнонимНеактивированный10 ptsНакидал принципиальную схему того что хочу получить на выходе. Скрипт сверху – это мои тщетные попытки воплотить требуемую мне логику, скрипт снизу – это работающий кусок кода из этой темы, но его как-то надо доработать под мои задачи, а у меня пока это не получается.
Вот ссылка на сам нод, с которым можно экспериментировать https://yadi.sk/d/km81oYrm3MfqrC
Сама задача похоже аналогична задаче из этой темы
АнонимНеактивированный10 ptsРенат Я., спасибо! Понял в чем была моя ошибка, когда я пробовал ночью предложенный тобой способ и у меня он не заработал. Надо было в узле проверки равенства переплетение в “Векторное произведение” выставить. Ночью не обратил на это внимание и не стал дальше разбираться в чем затык.
txt, тем не менее я буду признателен если подскажешь как модифицировать твой код в питоне для решения моей задачи. Интересно владеть разными способами решения одной и той же задачи.
АнонимНеактивированный10 ptsТут новая проблемка всплыла, даже 2. Почему-то из таких подготовленных списков пока корректно записываются в параметры пространств только текстовые значения. По плану писать в параметры метры, метры кубические в час, Ватты и целочисленные значения некоторой вспомогательной информации. И пока удаётся передавать в ревит только текстовые параметры. Не могу понять на чем спотыкается нод в процессе передачи значений, то ли на том что воспринимает передаваемые параметры как строковый тип данных, то ли на том что в списке содержатся пропуски в виде null значений, которые по какой-то причине не устраивают ревит.
Вот накидал тестовый проектик, файл эксель, откуда буду передавать значения в реальный проект и полурабочий нод. Сейчас там затыки во всех численных параметрах (высота, температура, расходы воздуха), которые я бы хотел передавать в свойства пространств.
Накидал простенький проектик с абстрактными пространствами, содержащими требуемые мне на данном этапе параметры. Прилагаю нод в его текущем виде. Если кто поможет разобраться на чем стопорится нод, буду очень признателен.
по поводу преобразующего скрипта
по поводу температур ты ссылался не на тот столбец
по поводу ошибки записи в параметр, если у тебя числовой параметр, то в него нельзя записать текст, а так как ты считываешь из Excel данные как String, тебе нужно перед записью в параметр произвести преобразования текста в число
“Высота помещения” не может быть равна 0
АнонимНеактивированный10 ptstxt, спасибо! Я очень ждал твоего решения и не сомневался в том что оно будет очень изящным. Сколько я ни бился с этими циклами, но сам бы до такого не додумался – к сожалению практический опыт пока в самом зачаточном состоянии.
Ренат, тоже спасибо! Действительно есть там некоторые косяки с моей стороны по части правильности выбираемых столбцов и ненулевой высоты, но пока вопрос температурами остается открытым, в м3/ч и Вт скорее всего достаточно будет преобразовать строковые значения в численные и ревит согласится их принять.
Мне тут еще пришла в голову идея что можно не сопоставлять индексы экселевского списка на предмет поиска их в списке номеров пространств, а просто отфильтровать список пространств на совпадения номеров помещений с номерами из экселя и отсортировать его по порядку. Надо будет проработать и такой сценарий.
Рад слышать. На самом деле это решение появилось благодаря посту Рената #6649 , что натолкнуло меня на кой-какие мысли, так что это своего рода командная работа) если узнаете какие то фишечки по питону, работе в динамо и все чего касается этот форум, то делитесь , найдутся те , кому они пригодятся.
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.