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

各キーにはさらに 6 つの値があるはずですが、各キーの最後の 2 つの値しか表示されません。

ここで何が間違っていますか?

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 に答える