【问题标题】:Build dict in loop. Python循环构建字典。 Python
【发布时间】:2014-02-14 06:18:13
【问题描述】:

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

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

代码如下:

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

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

我在这里做错了什么?

【问题讨论】:

  • 你先做dTabs[folder.Name] = OrderedDict(),然后再做dTabs[folder.Name] = table.Name。您正在用字符串覆盖OrderedDict。这是故意的吗?
  • 不,它不是故意的,不知道发生了这种情况......

标签: python dictionary key ordereddictionary


【解决方案1】:

你的内部循环一遍又一遍地分配在同一个位置

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

【讨论】:

    【解决方案2】:

    你的内部 for 循环:

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

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

    【讨论】:

    • 我明白你的意思,但我该怎么做呢?我认为这些值需要是一个列表吗?
    猜你喜欢
    • 2023-03-19
    • 2018-12-04
    • 2013-10-07
    • 2015-02-27
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    相关资源
    最近更新 更多