2014-01-23 91 views
0

我想知道我在做什麼錯在這裏。在循環中構建字典。 Python

我想在循環內部構建一個簡單的有序的dict。

繼承人的代碼:

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

你做'dTabs [文件夾。 Name] = OrderedDict()',後來做'dTabs [folder.Name] = table.Name'。你用一個字符串覆蓋'OrderedDict'。那是故意的嗎? – Kevin

+0

沒有它沒有故意,不知道發生了什麼...... –

回答

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 
+0

現在我明白我做錯了什麼。非常感謝! –

0

你的內部for循環:

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

覆蓋dTabs的值[folder.Name]每次它進入through--即,用於在文件夾中的每個itemfolder.Name是相同的,並且每個隨後的item覆蓋最後一個條目,因爲它具有相同的密鑰!我認爲你認爲每個鍵可以有多個值,這是不正確的。嘗試附加到密鑰的當前值,而不是替換它。

+0

我明白你的意思,但我該怎麼做?我認爲這些價值觀需要成爲一個清單呢? –