2011-09-01 3 views
21

목록의 독해력에 대해 알고 있는데, 사전에 대한 이해는 어떨까요?파이썬에 사전 보 완성이 있습니까? (함수가 dict을 반환하는 문제)

예상 출력 :

>>> countChar('google') 
    {'e': 1, 'g': 2, 'l': 1, 'o': 2} 
    >>> countLetters('apple') 
    {'a': 1, 'e': 1, 'l': 1, 'p': 2} 
    >>> countLetters('') 
    {} 

코드 (I 초보자이야) :

def countChar(word): 
    l = [] 
    #get a list from word 
    for c in word: l.append(c) 
    sortedList = sorted(l) 
    uniqueSet = set(sortedList) 
    return {item:word.count(item) for item in uniqueSet } 

이 코드의 문제는 무엇입니까? 왜 이걸 SyntaxError에 받습니까?

return { item:word.count(item) for item in uniqueSet } 
^ 
SyntaxError: invalid syntax 
+1

구문 오류가')'추가입니다 : –

+1

corrected.but 여전히 문제가있어'word.count (항목))' – newbie

+0

Y 수 실제 오류가 발생합니다. – SingleNegationElimination

답변

29

편집는 : AGF는 의견과 다른 대답에서 지적한 바와 같이, 파이썬 2.7 이상에 대한 사전 이해가있다.

def countChar(word): 
    return dict((item, word.count(item)) for item in set(word)) 

>>> countChar('google') 
{'e': 1, 'g': 2, 'o': 2, 'l': 1} 
>>> countChar('apple') 
{'a': 1, 'p': 2, 'e': 1, 'l': 1} 

목록에 word를 변환하거나 문자열을 반복 가능한 있기 때문에 세트로를 켜기 전에 정렬 할 필요가 없습니다 :

>>> set('google') 
set(['e', 'o', 'g', 'l']) 

아래 파이썬 2.6과 어떠한 사전 이해가 없다가, 이 때문에 구문 오류가 표시 될 수 있습니다. 대안은 이해력 또는 생성기를 사용하여 키 - 값 튜플의 목록을 작성한 다음 dict() 내장을 전달하는 것입니다.

+0

코드가 너무 짧아서 작동하지만 초보자입니다. 초보자를위한 다른 방법이 있습니다. – newbie

+1

@newbie -'lambda '에서 일반적인 함수 정의로 바꿨으므로 몇 가지 추가 설명을 추가하겠습니다. –

+0

설명해 주셔서 감사합니다. – newbie

60

는 파이썬 2.7 이상에 경우 :

{item: word.count(item) for item in set(word)} 

잘 작동합니다. 목록을 설정하기 전에 정렬 할 필요가 없습니다. 단어를 목록으로 변환 할 필요도 없습니다. 또한 collections.Counter(word)을 사용하기에 충분한 새로운 Python을 사용 중입니다. 파이썬의 이전 버전의 경우

, 당신은 dict 함축을 사용할 수 없습니다, 당신은 dict 생성자와 발전기 식을 사용할 필요가 :

dict((item, word.count(item)) for item in set(word)) 

를이 여전히 word을 반복 할 필요 len(set(word)) 번 뭔가를하려고, 그래서 :

from collections import defaultdict 
def Counter(iterable): 
    frequencies = defaultdict(int) 
    for item in iterable: 
     frequencies[item] += 1 
    return frequencies 
+5

파이썬의 구문은 항상 내가 ' 나는 속이는거야. 다른 언어가 왜 이렇게 간단하지 않습니까? – ArtOfWarfare

관련 문제