我正在尝试为字典中的重复键添加值。我不确定为什么我的代码无效。
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
感谢您的帮助。
答案 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等,val
为1.0
,2.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]