您遍历字典键,然后多次计算相同的键。您的循环体没有任何动态:
counterdict[int(newdict['week'])][newdict['stat']]+=1
如果您的字典中有 12 个键,则上述行将执行 12 次。
如果您希望看到您的循环访问多个具有相同名称的键,那么您误解了字典的工作原理。字典将唯一键映射到值。在文字字典声明中多次指定一个键将导致字典中的每个键只有一个副本,并具有它们的值之一:
>>> {'foo': 'bar', 'foo': 'baz'}
{'foo': 'baz'}
在 CPython 中,编译器会为您提供每个定义的键的最后一个值,这就是您'week': '1210'
在示例字典中看到的原因。
您的示例输入字典最终只有四个唯一键:
>>> newdict ={'category': 'failure', 'week': '1209', 'stat': 'tdc_ok', 'severityDue': '2_critic', 'category': 'failure', 'week': '1210', 'stat': 'tdc_nok', 'severityDue': '2_critic'}
>>> newdict
{'category': 'failure', 'week': '1210', 'stat': 'tdc_nok', 'severityDue': '2_critic'}
>>> len(newdict)
4
这让我怀疑你运行循环 3 次,计数为 12(循环遍历字典给你 4 个键)。
如果您有一个实际的字典列表,则从该列表中获取每个单独的字典并将其用作计数的基础:
for d in list_of_dictionaries:
counterdict[int(d['week'])][d['stat']] += 1
list_of_dictionaries
可能在哪里:
[
{'category': 'failure', 'week': '1209', 'stat': 'tdc_ok', 'severityDue': '2_critic'},
{'category': 'failure', 'week': '1210', 'stat': 'tdc_nok', 'severityDue': '2_critic'},
]