2016-11-03 20 views
-1

私の下の関数は、値のリストをとり、重複の数を返します。私はそれを数えて印刷することができましたが、私の仕事はそれを辞書として返すことです。私は正しい形式、アドバイスを返すために苦労してきた?関数は辞書を辞書として返しますか?

def counts(values): 
    d = {} 
    for val in values: 
     d.setdefault(val,0) 
     d[val] += 1 
    for val, count in d.items(): 
     d = ("{} {}".format(val,count)) 
     return d 
counts([1,1,1,2,3,3,3,3,5]) # Should return → {1: 3, 2: 1, 3: 4, 5: 1} 
+1

最初にアドバイスする'collections.Counter'を見てください。 –

+1

2回目のforループに' d'を再割り当てしてすぐに返します。あなたの最初のループの後にちょうど 'return d '。 – AChampion

+0

ああ、それは今私がそれを逃したものです。 –

答えて

1

だけで作成した辞書を返す:

def counts(values): 
    d = {} 
    for val in values: 
     d.setdefault(val,0) 
     d[val] += 1 
    return d 

収量:もちろん

>>> counts([1,1,1,2,3,3,3,3,5]) 
{1: 3, 2: 1, 3: 4, 5: 1} 

、モーセが指摘するように、Counterがそのようにだけではなく、それを使用し、このために構築されています:

from collections import Counter 

def counts(values): 
    return dict(Counter(values)) 
+2

なぜあなたはこのコミュニティのwikiを作ったのですか? –

+0

私はこのような答えである評判を得ることを本当に楽しんでいない@MorganThrapp。私はまた、他の人たちを先制させたいと思っています(何かを追加したい場合は、このCWを編集するように促します)。 –

+1

質問が答えに値すると思わないなら、なぜそれに答えるのですか? –