2014-02-20 24 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