2016-08-03 12 views
0

内の特定の出来事を数えるが、私はこのような辞書を持っていると言う:Pythonの:辞書

d={ 
'0101001':(1,0.0), 
'0101002':(2,0.0), 
'0101003':(3,0.5), 
'0103001':(1,0.0), 
'0103002':(2,0.9), 
'0103003':(3,0.4), 
'0105001':(1,0.0), 
'0105002':(2,1.0), 
'0105003':(3,0.0)} 

は、各キーの最初の4桁が、要素の「スロット」(例えば、「0101の識別子をconsituteことを考慮すると、 '、' 0103 '、' 0105 ')、スロットごとに0.0の出現回数をどのように数えることができますか?

意図した結果は、このような辞書である:私は本当にこれを行う方法がわからないように私の試みを提供することができないため

result={ 
'0101': 2, 
'0103': 1, 
'0105': 2} 

謝罪。

答えて

3

値は、あなたが探しているものであれば、キーの最初の4桁の数字を追加し、Counterを使用します。

from collections import Counter 

counts = Counter() 

for key, value in d.items(): 
    if value[1] == 0.0: 
     counts[key[:4]] += 1 

print counts 
+0

それを試してみてください。 ValueError:アンパックする値が多すぎます。それは 'for key、value in d:'を指します。 – FaCoffee

+2

'd.iteritems()'が必要です。 – FaCoffee

+0

@ CF84:ええ、あなたはアイテムが必要です、私はあまりにも速く入力しました... – RemcoGerlich

2

あなたはdefaultdictを使用することができます。

from _collections import defaultdict 

res = defaultdict(int) 
for k in d: 
    if d[k][1] == 0.0: 
     res[k[:4]] += 1 

print(dict(res)) 

あなたが行うと+=1、キーが存在しない場合、値0で作成し、操作を行います。