我有一个很长的列表值,如下所示,我正在考虑将其转换为字典。我想在python中创建字典,其中对于每个键0,1,2,...(比如说n),该值是属于该键的所有值的总和。例如,
0 -29.8568331501
1 -27.4866699437
2 -27.1228643508
0 -10.8685684486
1 -9.41353774283
2 -10.3218886291
...
然后,
dict = {0: SUM(-29.8568331501+-10.8685684486+..), 1:SUM(-27.4866699437+-9.41353774283+..), 2:1:SUM(-27.1228643508+-10.3218886291+..)}
我是一名蟒蛇新手,非常感谢有关如何做到这一点的任何指导。
答案 0 :(得分:2)
因此,假设您已将数据读入列表(或使用生成器),您确实可以通过非常简单的方式执行此操作:
from collections import defaultdict
sums = defaultdict(float)
for key, val in data:
sums[key] += val
我建议您熟悉collections
模块,因为它有很多正确的工具用于许多工作。在这种情况下,defaultdict
就像一个普通的python字典,但它有一个尚未包含的键的默认值(在这种情况下,默认值是float()
的值{{1 }})。多亏了这一点,您无需费心检查密钥是否已存在于该字典中。
答案 1 :(得分:1)
好的,有两件事:
带有字典的解决方案,为清晰起见,我称之为dictionary
。 1 ... N是key
s,您的浮点数是value
s:
如果密钥在字典中: 字典[key] + =值else: 字典[key] = value
您需要将其应用于每个key, value
对。
答案 2 :(得分:1)
您可以使用如下所述的字典理解:
tmpDict = {k: f(k,v) for k, v in tmp.items()}
用执行总和的函数替换f(k,v)
。
示例:的
生成数据
tmp = {}
for i in range(0, 10):
tmp [i] = [i for x in range(0, 10)]
{0:[0,0,0,0,0,0,0,0,0],1:[1,1,1,1,1,1,1,1,1,1,1 ],2:[2,2,2,2,2,2,2,2,2],3:[3,3,3,3,3,3,3,3,3], 4:[4,4,4,4,4,4,4,4,4,4],5:[5,5,5,5,5,5,5,5,5,5],6: [6,6,6,6,6,6,6,6,6,6],7:[7,7,7,7,7,7,7,7,7,7],8:[8 ,8,8,8,8,8,8,8,8,8],9:[9,9,9,9,9,9,9,9,9,9]}
执行分段总和
tmpDict = {k: sum(v) for k, v in tmp.items()}
结果集:
{0:0,1:10,2:20,3:30,4:40,5:50,6:60,7:70,8:80,9:90}