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

print dTabs

这是输出:

 OrderedDict([('YouthSportsTrustSportParents_P', 'KYS_Q8_YouthSportsTrustSportParents_P'), ('YouthSportsTrustSportParents_PM', 'KYS_Q8_YouthSportsTrustSportParents_PM')])

每个键应该还有六个值......但我只看到每个键的最后两个值。

我在这里做错了什么?

4

2 回答 2

0

你的内部 for 循环:

    for item in folder:
        table = item.Table
        dTabs[folder.Name] = table.Name

每次通过时都会覆盖 dTabs[folder.Name] 的值 - 也就是说,对于item文件夹中的每个,folder.Name都是相同的,并且每个后续都item覆盖最后一个条目,因为它具有相同的键!我认为您认为每个键可以有多个值,这是不正确的。尝试附加到键的当前值,而不是替换它。

于 2014-01-23T15:35:22.623 回答
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
于 2014-01-23T15:47:03.527 回答