总结嵌套 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]
我想更改嵌套 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]