簡體   English   中英

總結嵌套 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跟蹤您之前看到的鍵值對(如果訪問了尚未看到的鍵,則返回 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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM