将数据拆分为字典

时间:2015-02-04 19:07:53

标签: python dictionary

我有一个很长的列表值,如下所示,我正在考虑将其转换为字典。我想在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+..)}

我是一名蟒蛇新手,非常感谢有关如何做到这一点的任何指导。

3 个答案:

答案 0 :(得分:2)

因此,假设您已将数据读入列表(或使用生成器),您确实可以通过非常简单的方式执行此操作:

from collections import defaultdict

sums = defaultdict(float)
for key, val in data:
    sums[key] += val

我建议您熟悉collections模块,因为它有很多正确的工具用于许多工作。在这种情况下,defaultdict就像一个普通的python字典,但它有一个尚未包含的键的默认值(在这种情况下,默认值是float()的值{{1 }})。多亏了这一点,您无需费心检查密钥是否已存在于该字典中。

答案 1 :(得分:1)

好的,有两件事:

  1. 如果您的密钥实际上是1 ... N,那么请不要使用字典,而是使用简单的列表。
  2. 带有字典的解决方案,为清晰起见,我称之为dictionary。 1 ... N是key s,您的浮点数是value s:

    如果密钥在字典中:      字典[key] + =值else:      字典[key] = value

  3. 您需要将其应用于每个key, value对。

答案 2 :(得分:1)

您可以使用如下所述的字典理解:

Mapping Over Values

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}