在嵌套字典中添加相同键的值

2024-09-30 08:15:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图计算具有相同子键的子字典的tot值。我有一个包含相关键的列表mylist,我只需要计算列表中每个元素的值的总数

mylist = ['age','answ1', 'answ2', 'answ3']
d = {'01': {'age':19, 'answ1':3, 'answ2':7, 'answ3':2}, '02': {'age':52, 'answ1':8, 'answ2':1, 'answ3':10},...}

我试过了

tot = []
for k,v in d.items():
    for ke, va in v.items():
        for i in mylist[0:]
            count=0
            if ke == i:
                count+=v[ke]
                tot.append(count)

但我不是用同一个键的值的总和,而是按字典中出现的顺序得到不同键的值。 预期结果将是:

tot = [71, 11, 8, 12]

我得到的是

tot = [19, 3, 7, 2, 52, 8, 1, 10]

Tags: in列表forage字典countitems关键
3条回答

如果希望将结果存储在字典中,可以使用列表中的键创建一个字典,并在其中计算结果

result = {i: 0 for i in mylist}

for k, v in d.items():
    result['age'] += v['age']
    result['answ1'] += v['answ1']
    result['answ2'] += v['answ2']
    result['answ3'] += v['answ3']

result
{'age': 71, 'answ1': 11, 'answ2': 8, 'answ3': 12}

然而,这取决于钥匙是否不变,顺序应该无关紧要

编辑

通过以下更新,您可以在不考虑键名的情况下执行此操作。注意,它增加了一个额外的迭代

result = {i: 0 for i in mylist}
for k, v in d.items():
    for ke, va in v.items():
        result[ke] += v[ke]
mylist = ['age','answ1', 'answ2', 'answ3']
d = {'01': {'age':19, 'answ1':3, 'answ2':7, 'answ3':2}, '02': {'age':52, 'answ1':8, 'answ2':1, 'answ3':10}}

tot = [0] * len(mylist)
for k in d:
    for idx, i in enumerate(mylist):
        tot[idx] += d[k].get(i, 0)

print(tot)

印刷品:

[71, 11, 8, 12]

collections.Counter一起:

>>> ctr = sum(map(Counter, d.values()), Counter())
>>> [ctr[x] for x in mylist]
[71, 11, 8, 12]

或:

>>> [sum(e[k] for e in d.values()) for k in mylist]
[71, 11, 8, 12]

如果某些子目录可能缺少键,只需使用e.get(k, 0)Counter解决方案不需要它,它默认提供零

嗯,既然你现在接受了dict结果解决方案

>>> dict(sum(map(Counter, d.values()), Counter()))
{'age': 71, 'answ1': 11, 'answ2': 8, 'answ3': 12}

或者只是

>>> sum(map(Counter, d.values()), Counter())
Counter({'age': 71, 'answ3': 12, 'answ1': 11, 'answ2': 8})

尽管这些密钥可能比所需的密钥更多,但如果数据中有更多的密钥

相关问题 更多 >

    热门问题