如何制作一个整数列表,它是字典中一组列表中所有整数的总和?

6

假设我创建了一个由n个键组成的字典。每个键都映射到一个长度一致的整数列表。现在我想创建一个新列表,表示字典中各个列表中相应位置上整数的总和。举个例子:

my_dict = {'a': [1, 2, 3, 4], 'b': [2, 3, 4, 5], 'c': [3, 4, 5, 6]}

total_sum_list = []

for key in my_dict.keys():
    total_sum_list += ###some way of adding the numbers together

期望输出:

total_sum_list = [6,9,12,15]

如上所示,我不确定如何设置这个for循环,以便我可以创建像total_sum_list这样的列表。我尝试过组合列表推导式,但迄今为止我的努力并没有成功。有什么建议吗?

2个回答

8
你需要做的是转置列表以便对列求和。因此,使用字典值上的zip(键可以忽略)和列表推导式中的sum
一行代码实现:
total_sum_list = [sum(x) for x in zip(*my_dict.values())]

结果:

[6, 9, 12, 15]

工作原理:

zip 交错值。我使用参数解包将字典值作为参数传递给 zip(类似于 zip(a,b,c))。因此,当您执行以下操作时:

for x in zip(*my_dict.values()):
    print(x)

你会得到一个元组(tuple):
(1, 3, 2)
(2, 4, 3)
(3, 5, 4)
(4, 6, 5)

数据已准备好进行求和(即使顺序不同,但我们不关心,因为加法是可交换的 :))


3

根据您的使用情况,您可能需要考虑使用适当的库来处理更一般/复杂的功能。

numpy:通用科学计算

import numpy as np

my_dict = {'a': [1, 2, 3, 4], 'b': [2, 3, 4, 5], 'c': [3, 4, 5, 6]}

arr = np.array(list(d.values()))
# [[1 2 3 4]
#  [2 3 4 5]
#  [3 4 5 6]]

arr.sum(axis=0)
# [ 6  9 12 15]
pandas: 数据分析工具箱
import pandas as pd

my_dict = {'a': [1, 2, 3, 4], 'b': [2, 3, 4, 5], 'c': [3, 4, 5, 6]}

df = pd.DataFrame(my_dict)
#    a  b  c
# 0  1  2  3
# 1  2  3  4
# 2  3  4  5
# 3  4  5  6

df.sum(axis=1)
# 0     6
# 1     9
# 2    12
# 3    15

是的,还有一种完全不同但有效的方法。当数据很大时,使用这些重量级工具非常有用。在这些情况下,性能比纯Python更好(对于小数据集,导入模块所花费的时间会让人感到沮丧:))。 - Jean-François Fabre
1
在我看来,首先使用适当的库来处理所有基本事项是编写可扩展且易于理解的代码的关键。我喜欢你的回答和unpack、zip、sum和列表推导式的微妙组合。这非常适合Python初学者理解语言原语和结构。不过,我认为(根据用例!)应该优先选择库变体。 - Michael Hoff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接