2015-07-21 3 views
1

Я пытаюсь добавить списки l в качестве значений для разных ключей dict d. Для массива a, имея [6,12,18,24,30] Я пытаюсь получить Dict d содержать следующие пары ключ-значение:Неверный вывод при добавлении списка в dict

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] 

Где есть 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]} 

Я пытаюсь понять, где я неправильно.

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 
+0

Вы получаете сообщение об ошибке? Какова ваша ожидаемая производительность по сравнению с фактической продукцией? – Claris

+1

@Claris Я написал в вопросе, какой выход я получаю и чего хочу. Я сказал, что получаю неправильный вывод и не упоминал об ошибке. – user131983

ответ

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 
Смежные вопросы