2011-09-01 17 views
21

私はリスト内包表記について知っていますが、辞書内包表記はどうですか?Pythonに辞書内包表記がありますか? (関数を返す関数の問題)

予想される出力:

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

コード(私は初心者です):

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

を)': 'word.count(アイテム))' –

+1

corrected.butはまだ問題を持って – newbie

+0

ことができますYあなたが実際に行っているエラーを貼り付けますか? – SingleNegationElimination

答えて

29

編集:AGFは、コメントや他の回答で指摘したように、Pythonの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']) 

以下のPython 2.6とのためとは辞書内包表記はありませんが、構文エラーが表示されている可能性があります。代わりに、理解またはジェネレータを使用してキー値タプルのリストを作成し、それをdict()ビルトインに渡すことができます。

+0

あなたのコードは、それは短すぎる、それは動作しますが、私は初心者です、初心者のための他の方法があります。 – newbie

+1

@newbie - 私はそれを 'lambda'から通常の関数定義に変更しました。私は追加の説明を追加します。 –

+0

あなたの説明をありがとう。 – newbie

60

は、あなたは、Python 2.7以降にしている場合:

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

が正常に動作します。リストを設定する前にソートする必要はありません。単語をリストにする必要もありません。また、代わりにcollections.Counter(word)を使用するための十分な新しいPythonを使用しています。

あなたは、Pythonの古いバージョンを使っているのであれば、あなたはdict内包表記を使用することはできません、あなたはdictコンストラクタでジェネレータ式を使用する必要があります。

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

は、これはまだ反復処理する必要がありますwordlen(set(word))回、そのような何かしてみてください:構文エラーが `余分にある

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

Pythonの構文は、だまされている。なぜ他の言語はこれほどシンプルではないのですか? – ArtOfWarfare

関連する問題