总结嵌套 python 字典中的值,如果它们具有相同的键

Sum up the values inside nested python dictionaries if they have the same key

我想更改嵌套 python 字典中的值,如果它们具有相同的键。我的原始字典包含几个不同长度的嵌套字典。如果嵌套字典与前一个嵌套字典具有相同的键,则应将前一个键的值添加到当前键的值。这基本上是将值堆叠在一起。为了更好地理解:

ID 为 2 的嵌套字典包含以下对:{525: 6.8} 下一个字典也包含键 525,该键的值应为 6.8 + 6.8 = 13.6 ({525: 13.6})。另一个键为 525 的字典的值应该是 13.6 + 6.8 = 20.4 ({525: 20.4}).

这是我的词典:

{2: {510: 8.5, 525: 6.8, 540: 9.5}, 3: {525: 6.8, 540: 9.5}, 4: {525: 6.8, 540: 9.5, 570: 8.7, 585: 10.7, 600: 10.2}, 7: {600: 10.2, 615: 10.1}

这是转换后的样子:

{2: {510: 8.5, 525: 6.8, 540: 9.5}, 3: {525: 13.6, 540: 19}, 4: {525: 20.4, 540: 28.5, 570: 8.7, 585: 10.7, 600: 10.2}, 7: {600: 20.4, 615: 10.1}}

我已经尝试遍历嵌套的字典并将值写入列表。然后将值添加到下一个字典。但是最终我没有达到我的目的。

有人知道如何解决这个问题吗?

您可以使用 defaultdict 跟踪您之前看到的 key-value 对(如果访问了尚未看到的密钥,则 returns 0) .对于内部字典中的每个键,添加该键最后一次出现时的值。然后,更新 defaultdict,使“最后一次看到”的值成为当前值:

from collections import defaultdict
previous_sums = defaultdict(int)

for key, value in data.items():
    for inner_key in value:
        value[inner_key] += previous_sums[inner_key]
        previous_sums[inner_key] = value[inner_key]

print(data)

如果您使用字典方法 .get(),您可以避免使用 defaultdict(从而避免导入库),它已经提供了避免丢失键的功能:

previous_sums = dict()

for key, value in data.items():
    for inner_key in value:
        value[inner_key] += previous_sums.get(inner_key, 0)
        previous_sums[inner_key] += value[inner_key]