python - 从具有索引和值的矢量数据(字典)创建列表的函数

标签 python python-3.x list dictionary

我正在尝试编写一个函数,该函数将使用向量数据结构 a 来存储索引和值,并将其转换为新列表。新列表还将汇总具有重复索引的所有值。此外,a 可以是任意长度。

例如:

a = {'index': [], 'value': []}
a['index'] = [0,   2,   7,   2,   2,   5, 1]
a['value'] = [1.0, 2.0, 3.0, 4.0, 8.0, 6.0, 7.0]

期望的输出是:

x = [1.0, 7.0, 14.0, 0.0, 0.0, 6.0, 0.0, 3.0]

对于索引 2,它的总和为 14(2、4 和 8)。对于未出现在 a['index'] 中的任何索引,它将在 x 中分配为 0

我正在尝试在长度为 n 的零值的新 x 行上迭代 a[index,values]。如果 x[i] 已经存在,它将求和到现有值。我知道我的 for 语句有点不对劲,但我不确定如何在语法上修复它:

def newlist(a, n=None):
    i_max = max(a['index']) if a['index'] else -1
    if n is None:
        n = i_max+1
    else:
        assert n > i_max, 

    x = [0] * n
    for i, v in zip(a['index'], a['value']):
        if x[i] in a['index']:
            x[i]+=v
        else:
            x[i]=v
    return x

最佳答案

该列表已包含零,因此您始终可以只添加值(因为 0+v 与将其设置为 v 相同)。通过该修改,函数将如下所示:

def newlist(a, n=None):
    i_max = max(a['index']) if a['index'] else -1
    if n is None:
        n = i_max+1
    else:
        assert n > i_max

    x = [0] * n
    for i, v in zip(a['index'], a['value']):
        x[i] += v
    return x

它返回你所期望的:

>>> newlist(a)
[1.0, 7.0, 14.0, 0, 0, 6.0, 0, 3.0]

所需输出有一处不同,使用整数 0 而不是 float 0.。这可以通过将 x = [0] * n 替换为 x = [0.] * n 轻松解决。

更一般的说明:

你应该使用更有意义的变量名,比如 dct 而不是 an 应该意味着什么,我不明白。名为 newlist 的函数也不是很有用。

关于python - 从具有索引和值的矢量数据(字典)创建列表的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45928999/

相关文章:

python - 在 Cython 中优化代码的技巧

python - 将 Python 嵌入到 C 中 - 无法从 python 模块导入方法

python - 将 pdf 文件转换为 base64Binary 的最佳方法是什么?

python - 创建一个新的字典值列表,其键与单独列表中的项目匹配

r - 如何将列表转换为 r 中的语料库?

Python字典与列表,哪个更快?

Python Numpy 随机数 - 不一致?

python - 如何从列表的开头和结尾去除引号

python - numpy array - 使用 np.concatenate 或 np.insert 将零行添加到 ndarray

python-3.x - 在 Windows 10 上的 Jupyter (Pyhtong3) 中创建新笔记本的权限被拒绝