在 for 循环期间创建嵌套字典
Create nested dictionaries during for loop
我在 for 循环中创建了一个列表,效果很好,但我想创建一个字典。
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'}}
这个结构很完美但我希望它能抓取所有内容 因为当它执行 for 循环时它似乎在第一个循环中停止。这是为什么?我怎样才能让它继续循环?
我尝试了各种方法,例如创建另一个名为“Keys”的键列表和名为“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.]
但我想要一本字典。任何帮助,将不胜感激。谢谢!
在您的列表示例中,您正在 append
进入列表。在您的字典示例中,您每次都在创建一个新字典(从而从循环的先前迭代中删除数据)。您也可以通过分配给现有字典中的特定键来执行附加到它的等效操作。
viewPortDict[view.ViewName] = {'sheetNum': sheet.SheetNumber, 'viewBox' : vbox}
我在 for 循环中创建了一个列表,效果很好,但我想创建一个字典。
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'}}
这个结构很完美但我希望它能抓取所有内容 因为当它执行 for 循环时它似乎在第一个循环中停止。这是为什么?我怎样才能让它继续循环?
我尝试了各种方法,例如创建另一个名为“Keys”的键列表和名为“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.]
但我想要一本字典。任何帮助,将不胜感激。谢谢!
在您的列表示例中,您正在 append
进入列表。在您的字典示例中,您每次都在创建一个新字典(从而从循环的先前迭代中删除数据)。您也可以通过分配给现有字典中的特定键来执行附加到它的等效操作。
viewPortDict[view.ViewName] = {'sheetNum': sheet.SheetNumber, 'viewBox' : vbox}