2014-05-13 6 views
2

문자열과 숫자 k를 입력으로 가져 오는 함수를 작성하려고하는 중입니다. 키는 원래 문자열 및 각 키의 값에서 길이 k의 문자열이 문자열이 출연하는 인덱스의 순서입니다 있습니다사전을 수정하는 동안이 오류가 발생하는 이유는 무엇입니까? "TypeError : unhashable type : 'slice'

실행 예 :. 이것은 내 코드입니다

<<< hash_sequence("byebyeboy",3 ( 

{ 'yeb': [1, 4], 'boy': [6], 'bye': [0, 3], 'ebo': [5], 'eby': 
[2] } 

:

def hash_sequence(string, k): 
    dictionary={} 
    for i in range(len(string)): 
     dictionary[i:i+3]=[i] 
     if dictionary[i:i+3] in dictionary: 
      dictionary[i:i+3]+=[1] 
    return dictionary 
+4

당신이'사전을 기대하고 무엇을 [I : 나는 3 +] = [내가]'할까? – roippi

+0

@roippi 키 값에 인덱스 번호를 추가하려면 이것이 내 실수라고 생각합니다. 어떻게 키 값을 업데이트 할 수 있습니까? – Tam211

답변

6

아, 네가하려는 일이 뭔지 알아. 문자열을 자른다.. 잘못된 구문입니다.

dictionary[i:i+3]=[i] 

dictionary[string[i:i+3]]= [i] 

은 마찬가지로 if dictionary[i:i+3] in dictionary: 다음 줄에 등 if string[i:i+3] in dictionary:된다되어야한다.

정직하게 말하면 코드를 매우 혼란스럽게 만듭니다. 당신이 setdefault를 사용 (및 기타 버그 몇 가지 수정) 경우 상황이 명확하다 :

def hash_sequence(s, k=3): 
    dictionary={} 
    for i in range(len(s) - k + 1): 
     triplet = s[i:i+k] 
     dictionary.setdefault(triplet,[]).append(i) 
    return dictionary 

hash_sequence('byebyeboy') 
Out[28]: {'boy': [6], 'bye': [0, 3], 'ebo': [5], 'eby': [2], 'yeb': [1, 4]} 
관련 문제