循环遍历字典并添加值

时间:2018-01-11 19:02:25

标签: python dictionary

我正在尝试为字典中的重复键添加值。我不确定为什么我的代码无效。

d = {'inds': [], 'vals': []}
d['inds'] = [0,   3,   7,   3,   3,   5, 1]
d['vals'] = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]

我想获得一个列表,其中添加的值为索引3的结果,0表示不存在的索引:

desired_output=[1.0, 7.0, 0.0, 11.0, 0.0, 6.0, 0.0, 3.0]

我的代码:我正在制作零列表并在循环中添加字典。

d = {'inds': [], 'vals': []}
d['inds'] = [0,   3,   7,   3,   3,   5, 1]
d['vals'] = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]

length=len(d['inds'])

a=[0]*(length)

for key,val in d.items():
    a[key]= a[key] + d[val]

这是一个错误: TypeError:list indices必须是整数或切片,而不是str

感谢您的帮助。

3 个答案:

答案 0 :(得分:7)

你甚至不需要这里的字典(但我会把它留在里面)。只是拉链索引和值并添加到您的归零列表。此外,结果列表的长度也不正确。使用索引的max加一:

来计算它
d = {}
d['inds'] = [0,   3,   7,   3,   3,   5, 1]
d['vals'] = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]

result = [0]*(max(d["inds"])+1)
for a,b in zip(d['inds'],d['vals']):
    result[a] += b

结果:

[1.0, 7.0, 0, 11.0, 0, 6.0, 0, 3.0]

答案 1 :(得分:3)

for key, val in d.items():

这将循环覆盖d顶级的项目:首先key='inds'val=[0, 3, 7, 3, 3, 5, 1],然后key='vals'val=[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]。但是,您正在寻找key来取值0,3,7,3等,val1.02.0,{{ 1}}等等。

要循环3.0中的索引和d['inds']中的值,请使用zip。它将从每个子列表中同时拉出一个项目。

d['vals']

答案 2 :(得分:1)

使用较短但不那么有效的列表理解:

d = {}
d['inds'] = [0,   3,   7,   3,   3,   5, 1]
d['vals'] = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]
new_d = [0 if i not in d['inds'] else dict(zip(d['inds'], d['vals']))[i] for i in range(max(d["inds"])+1)]

输出:

[1.0, 7.0, 0, 5.0, 0, 6.0, 0, 3.0]