Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从按索引指定位置并跳过某些索引位置的字典创建列表_Python_Dictionary_Indexing - Fatal编程技术网

Python 从按索引指定位置并跳过某些索引位置的字典创建列表

Python 从按索引指定位置并跳过某些索引位置的字典创建列表,python,dictionary,indexing,Python,Dictionary,Indexing,我正在使用以下词典: d = {'inds':[0, 3, 7, 3, 3, 5, 1], 'vals':[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]} 我想创建一个新的列表,它获取列表d['vals']中的值,并通过列表d['inds']中的相应索引将它们放置在新列表中。最终结果应该是: [1.0, 7.0, 0.0, 11.0, 0.0, 6.0, 0.0, 3.0] 这需要采取以下措施: d['inds'] == [0, 3, 7, 3, 3,

我正在使用以下词典:

d = {'inds':[0, 3, 7, 3, 3, 5, 1], 'vals':[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]}
我想创建一个新的列表,它获取列表
d['vals']
中的值,并通过列表
d['inds']
中的相应索引将它们放置在新列表中。最终结果应该是:

[1.0, 7.0, 0.0, 11.0, 0.0, 6.0, 0.0, 3.0]
这需要采取以下措施:

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]
对于未包含在
d['inds']
中的任何索引位置,相应的值为0.0


对于重复的索引位置,该位置的
True
值是各个值的总和。例如,上述3重复3次;因此,
新列表[3]
应该
==11
,即2.0+4.0+5.0之和

首先,分配一个长度合适且满是零的列表:

result = [0] * (max(d['inds']) + 1)
然后循环索引和值,并将它们添加到列表中的值:

for ind, value in zip(d['inds'], d['vals']):
    result[ind] += value
输出:

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

在与一位帮助我完成这项工作的同事合作后,我们达成了以下更具动态性的功能(以允许结果列表的不同长度):


您应该展示您已经尝试过的,代码中具体不起作用的内容,而不是,我如何做到这一点
import numpy as np
d ={
    'inds': [0,3,7,3,3,5,1],
    'vals': list(range(1,8))}  
    ## this assumes the values in the list associated with the 'vals' key
    ## remain in numerical order due to range function.  


def newlist(dictionary, length) ##length must be at least max(d['inds'])+1
    out = np.zeroes(length)
    for i in range (len(dictionary['inds'])):
        out[dictionary['inds'][i]] += d['vals'][i]

    return(out)