你循环在你的字典键,再算上相同的密钥很多倍。关于你的循环体没有什么动态的:
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'},
]
提示:在分配它后直接打印'newdict' ...您可能会感到惊讶... –
字典必须具有唯一键。你确定他们没有被你的代码覆盖吗? –
我不明白这个问题,你能否给出更多的上下文? – mbdavis