Python:在字典中打印唯一值以及Count

时间:2014-10-14 16:24:54

标签: python dictionary

我正致力于扩展日志记录系统。我正在编写一个函数,当用户运行代码时,我们会查看运行日志,如果有错误,请将它们与运行日志本身一起收集。

我已经能够执行此操作,并且有一个运行日志和它们包含的错误消息的字典,一些错误在多个日志中重复,所以我想给用户一个'样品'记录每条错误消息,以及我们找到的错误数量。

我的词典就像

{
    'run_log_1': 'Syntax error on abc',
    'run_log_3': 'Syntax error on abc',
    'run_log_17': 'Expected int base 10',
    'run_log_23': 'Syntax error on xyz'
}

你明白了。

我想格式化输出,以便用户获得:

Error: Syntax error on abc
Total 2, Sample: run_log_3

Error: Expected int base 10
Total 1, Sample: run_log_17

我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

您可以制作一个额外的字典,并将第一个字典的值作为键放在其中:

counts = {}
for sample, error in errordict.items():
   if error not in counts:
      counts[error] = [0, sample]
   counts[error][0] += 1

然后新的dict将包含所需的计数以及每个计数的样本。

答案 1 :(得分:0)

您可以使用一些特殊的集合来完成此任务。

import collections

your_log_dict = dict(
      run_log_1='Syntax error on abc',
      run_log_3='Syntax error on abc',
      run_log_17='Expected int base 10')

counts = collections.Counter(your_log_dict.values())

samples = {v:k for k,v in your_log_dict.items()}

for error, count in counts.items():
    sample = samples[error]
    print('Error: {}\nTotal {}, Sample: {}\n'.format(error, count, sample))