2013-10-06 2 views
0

문자열을 사용하여 기본 미리보기를 만들고 싶습니다. 내가하고 싶은 기능으로 돌아 가기 : :의 나는 단어 '안녕하세요'있다고 가정 해 봅시다기본적으로 문자열에서 키/값 만들기

{'h':{'e'}, 'e':{'l'}, 'l':{'l', 'o'}} 
내가 먼저 모든 중복을 제거하기 위해 defaultdict (세트)을 만드는 시도

을,하지만 난 아니에요 문자열의 다음 문자에서 키의 값을 얻을하는 방법을 잘 (그 말이 있다면?)

def next(s): 
    x = defaultdict(set) 
    for i in range(len(s)-1): 
     x[i].add(s[i+1]) #this is the part i am unsure about 
    return x 

이 나에게 STR 객체가 '추가'할 속성이없는 방법을 말하는 오류를 반환합니다.

답변

2

코드는 잘 작동합니다 :

>>> from collections import defaultdict 
>>> def next(s): 
...  x = defaultdict(set) 
...  for i in range(len(s)-1): 
...   x[i].add(s[i+1]) 
...  return x 
... 
>>> next('hello') 
defaultdict(<type 'set'>, {0: set(['e']), 1: set(['l']), 2: set(['l']), 3: set(['o'])}) 

아마도 실행중인 코드는 사고로 defaultdict(str)를 사용?

>>> def next(s): 
...  x = defaultdict(set) 
...  for i in range(len(s)-1): 
...   x[s[i]].add(s[i+1]) 
...  return x 
... 
>>> next('hello') 
defaultdict(<type 'set'>, {'h': set(['e']), 'e': set(['l']), 'l': set(['l', 'o'])}) 

또한 반복자와 같은 문자열을 통해 루프, 이전을 '기억'할 수

def next(s): 
    x = defaultdict(set) 
    for i in range(len(s)-1): 
     x[s[i]].add(s[i+1]) 
    return x 

이 원하는 출력을 생성합니다

당신은 비록 키로 s[i]를 사용하려면 문자 :

def next_dict(s): 
    x = defaultdict(set) 
    prev = s[0] 
    for char in s[1:]: 
     x[prev].add(char) 
     prev = char 
    return x 

이전 가치가 들여다 보이기보다 뒤쳐져 있습니다. 당신은 이미 이전 값을 넘어 섰습니다.

+0

감사합니다! x [s [i]]는 내가 찾던 결과를 제공했습니다. 이러한 사소한 오류! 감사! :) – Kara