Я создал список во время for l oop, который работает хорошо, но вместо этого я хочу создать словарь.
from System.Collections.Generic import List
#Collector
viewPorts = list(FilteredElementCollector(doc).OfClass(Viewport))
#create a dictionary
viewPortDict = {}
#add Sheet Number, View Name and boxoutline to dictionary
for vp in viewPorts:
sheet = doc.GetElement(vp.SheetId)
view = doc.GetElement(vp.ViewId)
vbox = vp.GetBoxOutline()
viewPortDict = {view.ViewName : {'sheetNum': sheet.SheetNumber, 'viewBox' : vbox}}
print(viewPortDict)
Результат будет следующим:
{'STEEL NOTES': {'viewBox': <Autodesk.Revit.DB.Outline object at 0x000000000000065A [Autodesk.Revit.DB.Outline]>, 'sheetNum': 'A0.07'}}
Какая структура идеальна , но я хочу, чтобы он захватил все , поскольку, пока он выполняет l oop, кажется, что он останавливается на первом l oop. Это почему? И как я могу заставить его поддерживать l oop?
Я пробовал разные вещи, например, создал другой список ключей под названием «Ключи» и список значений под названием «viewPortList», например:
dict.fromkeys(Keys, viewPortList)
Но у меня всегда одна и та же проблема: я не могу перебрать все элементы. Для полного раскрытия информации я успешно создаю список. Вот как это выглядит.
from System.Collections.Generic import List
#Collector
viewPorts = list(FilteredElementCollector(doc).OfClass(Viewport))
#create a dictionary
viewPortList = []
#add Sheet Number, View Name and boxoutline to dictionary
for vp in viewPorts:
sheet = doc.GetElement(vp.SheetId)
view = doc.GetElement(vp.ViewId)
vbox = vp.GetBoxOutline()
viewPortList.append([sheet.SheetNumber, view.ViewName, vbox])
print(viewPortList)
Что отлично работает и печатает ниже (только часть длинного списка)
[['A0.01', 'APPLICABLE CODES', <Autodesk.Revit.DB.Outline object at 0x000000000000060D [Autodesk.Revit.DB.Outline]>], ['A0.02', etc.]
Но вместо этого мне нужен словарь. Любая помощь будет оценена. Спасибо!