2017-02-09 12 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

あなたはセットであなたのリスト 'A'をラップすることができます。 'b = {i:set(a)}のiのためのa.count(i)'。必要なモジュールがありません –

答えて

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