2014-09-19 77 views
0

我已经使用从错误日志中提取的值创建了嵌套字典。计算Python中字典键的唯一值的数量

ErrorTypes是“消息”和“CMD”

dict1 = { 
    '1234': [ 
     ['2014-09-19 09:55:41', 1234, 'Msg', 'N/A', 'N/A'], 
     ['2014-09-19 10:22:22', 123, 'Msg', 123, 'N/A'], 
     ['2014-09-19 12:22:21', 1234, 'Cmd', 123, 'N/A'] 
    ] 
} 

什么是我怎样才能得到一个计数,所以我知道了每个错误类型的多为每个键存在的代码?

这是我到目前为止有:

from collections import Counter 

dict2 = {} 
for k in dict1: 
     for v in k: 
       dict2[str(k)].append(str(k),collection.Counter(v[k] for v in dict1)) 

请帮帮忙!谢谢。

回答

1

您可以遍历列表并制作set错误类型,然后检查该集合的长度。根据定义,集合可能只包含独特的项目,因此您不会重复。

dict1 = {'1234': [['2014-09-19 09:55:41', 1234, 'Msg', 'N/A', 'N/A'], 
        ['2014-09-19 10:22:22', 123, 'Msg', 123, 'N/A'], 
        ['2014-09-19 12:22:21', 1234, 'Cmd', 123, 'N/A']]} 

>>> set(i[2] for i in dict1['1234']) 
set(['Msg', 'Cmd']) 

>>> len(set(i[2] for i in dict1['1234'])) 
2 

为了让您在您的评论

dict1 = {'1234': [['2014-09-19 09:55:41', 1234, 'Msg', 'N/A', 'N/A'], 
        ['2014-09-19 10:22:22', 123, 'Msg', 123, 'N/A'], 
        ['2014-09-19 12:22:21', 1234, 'Cmd', 123, 'N/A']], 
     '5678': [['2014-09-19 09:55:41', 1234, 'Foo', 'N/A', 'N/A'], 
        ['2014-09-19 10:22:22', 123, 'Bar', 123, 'N/A'], 
        ['2014-09-19 12:22:21', 1234, 'Bar', 123, 'N/A']]} 

from collections import Counter 

>>> {key : Counter([i[2] for i in dict1[key]]) for key in dict1.keys()} 
{'1234': Counter({'Msg': 2, 'Cmd': 1}), 
'5678': Counter({'Bar': 2, 'Foo': 1})} 
+0

描述的词典有没有一种方法来创建另一个字典,以便词典的格式是这样的: dict2 = {“1234” :{'Cmd':3,'Msg':2},'2345':{'Cmd':2,'Msg'5}} – so123 2014-09-19 16:51:13

+0

@ so123 Yup。你可以使用'collections.Counter',看我的编辑。 – CoryKramer 2014-09-19 16:57:59