Почему присваивание значения вложенному циклу присваивает больше ожидаемого времени? - PullRequest
1 голос
/ 21 апреля 2019

У меня есть вложенный словарь.Оригинальный словарь имеет ключи i, и каждый из этих ключей i отображает j других ключей в список.Я хочу добавить в каждый список значение.Поскольку я знаю ключи словарей, я перебираю ключи в цикле for(i) x for(j) и ожидаю назначения i*j.но я получаю i*i*j назначение.Где моя ошибка?

Я также пытался перебирать словарь, используя стандартный for i,j in dic.items(), но я снова получил больше заданий, чем ожидалось.

# creating empty dictionary
dic_2 = {}
for i in range (10):
    dic_2[i] = []

dic = {}
for i in range (10):
    dic[i] = dic_2

# =========================================
# appending values
counter = 0
for i in range (10):
#     print("counter = ", counter,'_________', "i = ", i)
    for j in range (10):
#         print("__", "counter = ", counter,"j = ", j)
        counter += 1
        dic[i][j].append(counter)
dic

Я ожидаю

dic[0][0] = [0] 

но я получаю

dic[0][0] = [1, 11, 21, 31, 41, 51, 61, 71, 81, 91]

Ответы [ 2 ]

0 голосов
/ 21 апреля 2019

Подходит ли этот код для ваших требований.

K = 10  # your range 
dic = {j:{i:[(K*j)+i] for i in range(K)} for j in {i:[i] for i in range(K)}}
0 голосов
/ 21 апреля 2019

Каждая запись в dic является ссылкой на один и тот же словарь, dic_2.Чтобы получить отдельный список для каждого i,j, необходимо создать списки во вложенном цикле, поскольку текущий код использует те же 10 списков для каждого i.

for i in range(10):
    dic[i] = dict()
    for j in range(10):
        dic[i][j] = list()
.
...