2017-03-16 9 views
1

文字列を取り、基本的には文字が何回繰り返されているかを数える関数を設定したいので、辞書でそれをやりたいif else文を使用しましたが、今は.getメソッドを使いたいと思います。これまでのところ私のコードは次のようになります。ディクショナリを使用する方法.getメソッドをカウントするには?

def histogram(s): 
    d = dict() 
    for c in s: 
     d.get(c) 
     d[c] = 1 
    return d 

g = histogram('bronto') 
print(g) 

この版画:しかし

{'b': 1, 'r': 1, 'o': 1, 'n': 1, 't': 1} 

あなたは2 o年代があるはずです見ることができるように。以前に宣言されていないので、私はd[c] += 1を実行できません。 forループ内の余分な文字数をカウントする関数を取得するにはどうすればよいですか?

d[c] = d.get(c, 0) + 1 

答えて

1

あなたはそれに追加しようとする前に、エントリが辞書に存在するかどうかチェックしたいでしょう。あなたが今までに書いたことの最も簡単な拡張は、行くごとに各文字をチェックすることです。

def histogram(s): 
    d = dict() 
    for c in s: 
     if c in d: 
      d[c] += 1 

     else: 
      d[c] = 1 

    return d 

g = histogram('bronto') 
print(g) 
0

:あなたがして、たとえば、dict.getの戻り値を処理する必要がdict.getdictの平野使用したいと場合は

from collections import Counter 
g = Counter('bronto') 

collections.Counterがためですまさにだ

0
別に d[c] = d.get(c, 0) + 1から

、およびCounterソリューション、私はdefaultdictの存在を指摘したいと思います:

from collections import defaultdict 

def histogram(s): 
    d = defaultdict(int) 
    for c in s: 
     d[c] += 1 
    return d 

defaultdictKeyErrorを上げることはありません。コンストラクタ(クラスまたは関数)で初期化されます。キーがない場合、コンストラクタは引数なしで呼び出され、通常の操作を再開する前に戻り値がキーに割り当てられます。

この場合は、Counterを使用しますが、より一般的なシナリオではdefaultdictを使用すると便利です。

関連する問題