向dict添加列表时输出错误

use*_*983 1 python numpy

我正在尝试将列表添加l为不同dict d键的值.对于数组a,[6,12,18,24,30]我试图让dict d包含以下键值对:

d[6] = [0, 0, 0.....0]
d[12] = [6, 0, 0, ..0]
d[18] = [6, 12, 0, ...0]
d[24] = [6, 12, 18, 0, ..0]
Run Code Online (Sandbox Code Playgroud)

上面每个列表中有59个元素.

我使用下面的代码执行此操作,但我的密钥输出24是:

{24: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 12, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 18, 12, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
Run Code Online (Sandbox Code Playgroud)

我想知道我哪里出错了.

d = {}
l = []
a =numpy.array([6,12,18,24,30])
for x, value in numpy.ndenumerate(a): 
    months_to_maturity = value
    for i in range(6, 354, 6):
        if i <= months_to_maturity:
            l.append(months_to_maturity - i)
        else:
            l.append(0)

    d[months_to_maturity] = l
Run Code Online (Sandbox Code Playgroud)

Cla*_*diu 5

你总是追加到同一个名单.因此,所有字典值最终都指向同一列表.您希望每次都附加到不同的列表:

d = {}
a = numpy.array([6, 12, 18, 24, 30])
for months_to_maturity in a:
    l = []
    for i in range(6, 354, 6):
        if i <= months_to_maturity:
            l.append(months_to_maturity - i)
        else:
            l.append(0)

    d[months_to_maturity] = l
Run Code Online (Sandbox Code Playgroud)