2011-09-08 4 views
1

나는 파이썬에 익숙하지 않았기 때문에 내가 이미 거기에있는 것을 놓치고있는 경우일지도 모른다. 누군가 내가 이것을 정리하는 것을 도울 수 있다면 좋을 것이다. 다음 형식의 중첩 된 사전이 있습니다. 기본 사전에 key가 있습니다. userid 다음은 특정 사용자가 20 개의 다른 제품을 평가했습니다. 따라서 중첩 된 사전에는 제품 ID가 이고 값이 있습니다 등급 I 파일에서 다음을 읽고있다 이다 : 첫 번째 단어는 사용자 ID이고, 두 번째 단어는 영화 ID입니다 : 세 번째 단어가 파이썬 : 중첩 된 사전 중복 값

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 [userId를] = innerDict (마지막 하나에 추가하는 대신에) 새로운 것을 만들 것입니다. API를 작성한 방법으로, 이것들과 함께 작업해야합니다. 데이터 구조 만 .. (목록에 추가하지 않음) 중첩 된 사전이어야합니다. 감사합니다.

+0

'innerDict'를 생성 한 직후 삭제합니다. 'dataDict [userId]'는 빈 dict를 포함 할 것입니다 ... –

답변

2

여기서 외부 dict에 새로운 내부 dict를 추가해야합니다. ? 그럼 당신은 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는 키가 아직 존재하지 않는 경우 새 빈 딕셔너리를 생성하고, 그렇지 않으면 당신이 이미 가지고 한 DICT를 반환합니다.