Python如何计算每组字典指定key的总和并追加到对应新key中
问题原因
你将存储len值的added列表定义在了所有循环的最外层,每处理完一组scores后没有清空该列表,所有分组的len值都会被持续追加到同一个列表中,因此求和时得到的是所有已处理分组的累计值,而非当前分组的单独求和结果。
修改方案
方案1:基于原有逻辑修改
只需要将added列表的初始化移动到classes的遍历循环内部,每次处理新的分组时都新建空列表存储当前组的len值即可:
output=[] for k,v in l.items(): if k=='classes': for i in v: added=[] # 每次处理新的classes分组时,初始化空列表存储当前组的len值 for ke,ve in i.items(): if ke=='scores': for j in ve: for key,val in j.items(): if key=='len': add = val added.append(add) sumed=sum(added) out={'result':ve,'total':sumed} output.append(out) print(output)
方案2:简化写法
不需要多层嵌套循环,直接遍历classes列表,对每个分组的scores直接求和即可,代码可读性更高:
output = [] for item in l['classes']: scores = item['scores'] total = sum(s['len'] for s in scores) output.append({'result': scores, 'total': total}) print(output)
两种写法都可以得到你预期的输出结果。
内容的提问来源于stack exchange,提问作者gm tom
相关产品推荐
相关产品推荐

