Python如何解压缩字典

时间:2018-09-04 06:05:28

标签: python python-3.x dictionary

我有一本字典:

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]

3 个答案:

答案 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]

首先,您需要初始化字典,该字典的范围从inds列表中的最小值到最大值

    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]