2014-07-08 6 views
-1
for index,line in enumerate(status): 
    for word in line: 
     if word not in score_dict: 
     non_sentiment_dictionary[word].extend([original_sentiment[index]]) 

위의 내용은 내 코드입니다. 일부 배경 정보는 상태가 중첩 된 목록입니다. 그것은 여러 문장을 가지고 있고 나는 각 문장 자체가 하나의 목록이되도록 각 문장의 단어들을 이미 나누었다.파이썬에서 사전 값 수정하기 (이상한 결과 얻기)

예를 들어

, 상태 = [[ '나', '사랑', '당신'], [ '당신은', '있다', '최고']]

score_dict 및 non_sentiment_dictionary가 사전. 예 : score_dict = { 'love': 5, 'awesome': 3}

non_sentiment_dictionary의 원래 사전 값이 비어 있습니다.

그리고 original_sentiment리스트가 있습니다. 단순한 정수 배열입니다. 간단하게하기 위해 은 0으로 가득 찬 목록입니다.

내가 원하는 것은 상태의 각 줄에있는 각 단어에 해당 단어가 score_dict에 포함되어 있지 않으면 그 단어 키로 사전 값을 수정하는 것입니다. 이 경우 목록을 확장하십시오.

예를 들어 'are'라는 단어가 score_dict에 없으면 non_sentiment_dictionary [ 'are'] 목록을 확장합니다.

문제점은 내가 목록이 확장 될 때마다 이전 루프의 전체 값을 얻는 것처럼 보이기 때문에 non_sentiment_dictionary가 매우 빠르게 증가한다는 것을 이해하지 못하는 몇 가지 이유 때문입니다.

나는 무슨 일이 일어나고 있는지 이해하기 위해 몇 가지 print 서술문을 작성한 후에 결과를 보았습니다.

'하늘'은 이미 [0,0,0,0]이라고 가정 해 보겠습니다. 루프에서 처음으로 'god'라는 단어를 볼 때 우리는 [0] 만 가져야합니다.

하지만 다음 [0,0,0,0]이 있습니다. non_sentiment_dictionary의 원래 사전 값이 비어 있더라도 이전에 액세스 한 사전의 값을 복사하는 것 같습니다.

sky 
[0, 0, 0, 0] 
god 
[0, 0, 0, 0, 0] 

모든 도움을 주시면 감사하겠습니다.

답변

0

확장은 목록을 받아 여기에 또 다른 목록을 추가 - 당신이 아직 존재하지 않을 수있는 간단한 목록에 값 추가 할 :

non_sentiment_dictionary.setdefault(word, []).append([original_sentiment[index]]) 
+0

나는 모두 추가하고 확장 시도합니다. 여전히 문제를 해결하지 못합니다 ... – user3817518