2017-02-09 70 views
0

我正在尋找一個行,有效的方式,給出一個列表,輸出一個字典與密鑰作爲列表中的不同值,字典的值是該計數鍵入列表中。列表的計數的Python字典

例如,

a = [1,1,1,2,2,3,]  ##input 
b = {1: 3, 2: 2, 3: 1} ##output 

我發現{i: a.count(i) for i in a} 工作正常,但它會做過多的計算,如在輸入列表a=[1,1,1],它將覆蓋鍵和值[1] [3] 3次。

我也可以做一些更像以下的手動,但我正在尋找更優雅和簡單的東西。

b = {} 
for i in a: 
    if i in b: 
     b[i] += 1 
    else: 
     b[a] = 1 
+1

你可以用你的列表'了'在一組。 'b = {i:a.count(i)for i in set(a)}'。沒有模塊需要 –

回答

3

使用collections.Counter

>>> from collections import Counter 
>>> a = [1,1,1,2,2,3,] 
>>> b = Counter(a) 
>>> b 
Counter({1: 3, 2: 2, 3: 1}) 

注意,Counterdict一個子類:

>>> isinstance(b, dict) 
True 
+0

如果你看到一個問題已經在網站上回答過,你可以舉報或投票將其作爲一個副本關閉(特別是當谷歌搜索問題的標題已經超過了足夠的研究)。 – TigerhawkT3