2017-03-16 70 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循環中的額外字母?

回答

1

這正是collections.Counter是:

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

但是,如果你想使用純dict S和dict.get你需要處理的dict.get的返回值,例如有:

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

在嘗試添加條目之前,您需要檢查條目是否存在於字典中。到目前爲止所寫的最簡單的擴展就是隨時檢查每個字符。

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

除了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 

defaultdict從未提出了一個KeyError。它是用一個構造函數(一個類或一個函數)初始化的。如果缺少某個鍵,則將在不使用參數的情況下調用構造函數,並在返回正常操作之前將返回的值分配給鍵。

對於這種情況,我會使用Counter,但defaultdict可用於更一般的情況。