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]
모든 도움을 주시면 감사하겠습니다.
나는 모두 추가하고 확장 시도합니다. 여전히 문제를 해결하지 못합니다 ... – user3817518