2014-02-20 22 views
1

我有一個包含key:value(list)的字典。我想對詞典中列表中的第一個元素進行頻率計數。在Python中獲取字典中值的第一項的頻率計數

的字典看起來像一個例子:

dict_id = {'id_111': ['10'], 'id_222': ['10', '10'], 'id_234': ['9'], 'id_654': ['13', '10'], ..} 

期望的結果:

[(['10'], 2), (['9'], 1), (['13'], 1), ...] 

這是我已經試過,但它使用的整個列表爲重點的第一個元素,而不是列表。

newDict = [(k, len(list(v))) for k, v in itertools.groupby(ids.values())] 
print newDict 

>> [(['10'], 1), (['10', '10'], 1), (['13', '10'], 1), ...] 

任何幫助表示讚賞。

回答

1
newDict = {} 
for k, v in dict_id.iteritems(): 
    if v[0] in newDict: 
     newDict[v[0]] += 1 
    else: 
     newDict[v[0]] = 1 
print newDict 

這將創建一個實際的字典。

3
from collections import Counter 
print Counter(dict_id[k][0] for k in dict_id) 
# Counter({'10': 2, '9': 1, '13': 1}) 

如果你想輸出將在您的問題

print [([k], c) for k, c in Counter(dict_id[k][0] for k in dict_id).items()] 
# [(['9'], 1), (['10'], 2), (['13'], 1)] 
+0

只是喜歡那些'Counter'問題指定的格式:P –

+0

>>> dict_id = { 'id_111':」 10 '], 'id_222':[' 10' , '10'], 'id_234':[ '9'], 'id_654':[ '13', '10'], 'id_333':[ '10' , '7']} >>>打印計數器(dict_id [K] [0]對於k在dict_id) 計數器({ '10':3, '9':1, '13':1}) 爵士你只是檢查[k] [0]。不在這種情況下工作。 –

+0

@TanveerAlam我相信這是OP正在尋找:) – thefourtheye