我有一本字典:
inds = [0, 3, 7, 3, 3, 5, 1]
vals = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]
d = {'inds': inds, 'vals': vals}
print(d)会让我知道:{'inds':[0,3,7,3,3,5,1],'vals':[1.0,2.0,3.0,4.0,5.0,6.0, 7.0]}
如您所见,inds(keys)没有排序,有重复,并且缺少一些:范围是0到7,但是只有0,1,3,5,7个不同的整数。我想编写一个使用字典(d)并将其解压缩为完整向量的函数,如下所示。对于任何重复的索引(在这种情况下为3),我想对相应的值求和,而对于缺少的索引,则需要0.0。
# ind: 0 1 2 3* 4 5 6 7
x == [1.0, 7.0, 0.0, 11.0, 0.0, 6.0, 0.0, 3.0]
尝试编写一个返回最终列表的函数……类似这样:
def decompressor (d, n=None):
final_list=[]
for i in final_list:
final_list.append()
return(final_list)
# final_list.index: 0 1 2 3* 4 5 6 7
# final_list = [1.0, 7.0, 0.0, 11.0, 0.0, 6.0, 0.0, 3.0]
答案 0 :(得分:1)
有些事情对我来说仍然不清楚,但假设您正在尝试创建一个列表,其中最大索引是您在inds列表中可以找到的索引,并且您想要一个列表,因此您可以执行以下操作:
inds = [0, 3, 7, 3, 3, 5, 1]
vals = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]
#initialize a list of zeroes with lenght max index
res=[float(0)]*(max(inds)+1)
#[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
#Loop indexes and values in pairs
for i, v in zip(inds, vals):
#Add the value to the corresponding index
res[i] += v
print (res)
#[1.0, 7.0, 0.0, 11.0, 0.0, 6.0, 0.0, 3.0]
答案 1 :(得分:0)
inds = [0,3,7,3,3,5,1]
值= [1.0、2.0、3.0、4.0、5.0、6.0、7.0]
max_id = max(inds)
min_id = min(inds)
my_dict={}
i = min_id
while i <= max_id:
my_dict[i] = 0.0
i = i+1
for i in range(len(inds)):
my_dict[inds[i]] += vals[i]
my_dict = {0:1.0,1:7.0,2:0,3:3:11.0,4:0,5:6.0,6:0,7:3.0}
答案 2 :(得分:0)
尝试一下,
xyz = [0.0 for x in range(max(inds)+1)]
for i in range(max(inds)):
if xyz[inds[i]] != 0.0:
xyz[inds[i]] += vals[i]
else:
xyz[inds[i]] = vals[i]