辞書のキーをループしてから、同じキーを何度も数えます。ループ本体には動的なものはありません。
counterdict[int(newdict['week'])][newdict['stat']]+=1
辞書に 12 個のキーがある場合、上記の行は 12 回実行されます。
ループが同じ名前の複数のキーにアクセスすることを期待していた場合、辞書がどのように機能するかを誤解しています。辞書は一意のキーを値にマップします。リテラル ディクショナリ宣言でキーを複数回指定すると、各キーのコピーが1 つだけのディクショナリになり、その値の1 つが含まれます。
>>> {'foo': 'bar', 'foo': 'baz'}
{'foo': 'baz'}
CPython では、コンパイラは定義されたキーごとに最後の'week': '1210'
値を提供します。これが、例の辞書に表示される理由です。
サンプル入力ディクショナリは、最終的に 4 つの一意のキーのみになります。
>>> 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'},
]