在循环中构建dict。蟒蛇

时间:2014-01-23 15:32:17

标签: python dictionary key ordereddictionary

我试图找出我在这里做错了什么。

我正在尝试在循环中构建一个简单的有序字典。

下面是代码:

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')])

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

我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

你的内心循环:

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

每次覆盖时都会覆盖dTabs [folder.Name]的值 - 也就是说,对于文件夹中的每个itemfolder.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