2011-09-08 133 views
1

我不是那種在python中經驗豐富的人,所以可能會出現這種情況,我錯過了已經存在的東西..但是如果有人能幫我解決這個問題,那將是非常棒的。 我有一個嵌套的字典是以下形式的東西: 主要詞典有項:用戶ID 然後在這個特定的用戶評分(也許)20種產品, 所以嵌套詞典有一個關鍵:產品ID 和價值是評級 我從文件中讀取這些:其中,第一個字是用戶ID,第二個字是電影ID:第三字評級Python:嵌套字典重複值

dataDict={} 
innerDict = {} 
for line in myFile: 
     words = line.strip().split() 
     userId = words[0] 
     movieId = words[1] 
     rating = words[2] 
     innerDict[movieId] = rating 
     dataDict[userId] = (innerDict) 
     innerDict = {} 

但顯然行 innerDict [用戶id] = innerDict將創建一個新的(而不是將它追加到最後一個..) 我寫了API的方式,我必須與這些datastructures only ..(沒有追加到列表)它只能是一個嵌套字典.. 謝謝

+0

您在創建它後立即刪除'innerDict'。 'dataDict [userId]'然後將包含一個空字典... –

回答

2

在這裏,你需要添加一個新的內部字典,只有當它還不存在,右?然後,你需要使用setdefault

dataDict={} 
for line in myFile: 
     words = line.strip().split() 
     userId = words[0] 
     movieId = words[1] 
     rating = words[2] 
     innerDict = dataDict.setdefault(userId, {}) 
     innerDict[movieId] = rating 
0

您的結構

datadict = {"user1": {"Gladiator": 9, "Ghost": 2, "Jurassic Park": 8}, 
      "user2": {"E.T.": 0, "300": 10} 
      } 

,對嗎?

然後你只需要setdefault()

datadict.setdefault(userId, {})[movieId] = rating 

setdefault創建如果該鍵不存在新的空字典,否則返回你已經得到了字典。