【问题标题】:How to add values in column by key in nested dictionary of list in python如何在python列表的嵌套字典中按键添加值
【发布时间】:2025-11-23 11:10:01
【问题描述】:

我有嵌套的列表字典。

inputlist= {1: {0: [[1, 20], [6, 20]], 1: [[3, 22], [4, 22]]},
            2: {0: [[2, 21], [7, 21]], 1: [[3, 22], [4, 23]]},
            3: {0: [[5, 23], [8, 22]], 1: [[7, 23], [3, 11]]}}

对于每个键 1,2 和 3,我想按每个键 0 和 1 的列值进行加法。 结果应该是这样的:

{1: {0: [(7, 40)] 1: [(7, 44)]},
 2: {0: [(9, 42)] 1: [(7, 45)]},
 3: {0: [(13, 45)] 1: [(10, 34)]}}

这是我尝试过的:

sum_result={}
for k1, v1 in inputlist.items():
    for (k2,v2) in v1.items():
        sum_result+= v2
    print (sum_result)

【问题讨论】:

  • {k:{k2:list(map(sum,zip(*v2))) for k2,v2 in d.items()} for k,d in inputlist.items()} 是一种方式

标签: python dictionary key


【解决方案1】:

你可以试试听写理解

inputlist= {1: {0: [[1, 20], [6, 20]], 1: [[3, 22], [4, 22]]},
            2: {0: [[2, 21], [7, 21]], 1: [[3, 22], [4, 23]]},
            3: {0: [[5, 23], [8, 22]], 1: [[7, 23], [3, 11]]}}

output = {k1:{k2: list(map(sum, zip(*v2))) for k2,v2 in v2.items()} for k1,v2 in inputlist.items()}

# {1: {0: [7, 40], 1: [7, 44]},
#  2: {0: [9, 42], 1: [7, 45]},
#  3: {0: [13, 45], 1: [10, 34]}}

【讨论】:

  • lol dang almsot 和我的评论一样:P
【解决方案2】:

尝试以下代码以获得预期的输出:

inputlist= {1: {0: [[1, 20], [6, 20]], 1: [[3, 22], [4, 22]]},
            2: {0: [[2, 21], [7, 21]], 1: [[3, 22], [4, 23]]},
            3: {0: [[5, 23], [8, 22]], 1: [[7, 23], [3, 11]]}}

sum_result= dict()
for k1, v1 in inputlist.items():
    sum = []
    temp = {}
    for (k2,v2) in v1.items():
        sum = [v2[0][0]+v2[1][0], v2[0][1]+v2[1][1]]
        temp[k2] = sum
    sum_result[k1] = temp

print(sum_result)

输出:

{
   1: {0: [7, 40], 1: [7, 44]}, 
   2: {0: [9, 42], 1: [7, 45]}, 
   3: {0: [13, 45], 1: [10, 34]}
}

【讨论】:

    【解决方案3】:

    有更简洁的方法可以做到这一点,但我认为如果我们将其分解为逐步的方法会更清楚:-

    inputlist = {1: {0: [[1, 20], [6, 20]], 1: [[3, 22], [4, 22]]},
                 2: {0: [[2, 21], [7, 21]], 1: [[3, 22], [4, 23]]},
                 3: {0: [[5, 23], [8, 22]], 1: [[7, 23], [3, 11]]}}
    outputlist = {}
    for i in inputlist:
        outputlist[i] = {}
        for j in inputlist[i]:
            outputlist[i][j] = []
            ta = [0, 0]
            for k in inputlist[i][j]:
                ta[0] += k[0]
                ta[1] += k[1]
            outputlist[i][j].append(ta)
    print(outputlist)
    

    【讨论】:

      最近更新 更多