我试图找出我在这里做错了什么。
我正在尝试在循环中构建一个简单的有序字典。
下面是代码:
dTabs = OrderedDict()
for iFolder, folder in enumerate(mtd.GroupedTables):
if folder.Count > 0:
dTabs[folder.Name] = OrderedDict()
for item in folder:
table = item.Table
dTabs[folder.Name] = table.Name
print dTabs
这是输出:
OrderedDict([('YouthSportsTrustSportParents_P', 'KYS_Q8_YouthSportsTrustSportParents_P'), ('YouthSportsTrustSportParents_PM', 'KYS_Q8_YouthSportsTrustSportParents_PM')])
每个键应该还有六个值...但我只看到每个键的最后两个值。
我在这里做错了什么?
答案 0 :(得分:0)
你的内心循环:
for item in folder:
table = item.Table
dTabs[folder.Name] = table.Name
每次覆盖时都会覆盖dTabs [folder.Name]的值 - 也就是说,对于文件夹中的每个item
,folder.Name
都是相同的,并且每个后续item
覆盖最后一个条目,因为它具有相同的密钥!我认为你认为每个键可以有多个值,但事实并非如此。尝试附加到键的当前值,而不是替换它。
答案 1 :(得分:0)
您的内部循环一遍又一遍地分配在同一位置
dTabs = OrderedDict()
for iFolder, folder in enumerate(mtd.GroupedTables):
if folder.Count > 0:
dTabs[folder.Name] = OrderedDict()
for item in folder:
table = item.Table
dTabs[folder.Name] = table.Name # same location is being updated
print dTabs
你需要一个像数据结构这样的列表来保存每个“table.Name”
dTabs = OrderedDict()
for iFolder, folder in enumerate(mtd.GroupedTables):
if folder.Count > 0:
dTabs[folder.Name] = []
for item in folder:
table = item.Table
dTabs[folder.Name].append(table.Name)
print dTabs