Добавление словаря в список в цикле Python
Я базовый программист на python, поэтому, надеюсь, ответ на мой вопрос будет легким.
Я пытаюсь взять словарь и добавить его в список. Затем словарь изменяет значения, а затем снова добавляется в цикле. Кажется, что каждый раз, когда я это делаю, все словари в списке меняют свои значения в соответствии с тем, что было просто добавлено.
Например:
>>> dict = {}
>>> list = []
>>> for x in range(0,100):
... dict[1] = x
... list.append(dict)
...
>>> print list
Я бы предположил, что результат будет [{1:1}, {1:2}, {1:3}... {1:98}, {1:99}]
, но вместо этого я получил:
[{1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}]
Любая помощь очень ценится.
Ответы
Ответ 1
Вам нужно добавить копию, иначе вы просто добавляете ссылки на один и тот же словарь снова и снова:
yourlist.append(yourdict.copy())
Я использовал yourdict
и yourlist
вместо dict
и list
; вы не хотите замаскировать встроенные типы.
Ответ 2
Когда вы создаете словарь adict
вне цикла, вы добавляете тот же самый dict в свой alist
список. Это означает, что все копии указывают на один и тот же словарь, и вы получаете последнее значение {1:99}
каждый раз. Просто создайте каждый словарь внутри цикла, и теперь у вас есть 100 разных словарей.
alist = []
for x in range(100):
adict = {1:x}
alist.append(adict)
print(alist)
Ответ 3
Вы также можете использовать zip
и составить список, чтобы делать то, что вам нужно.
Если вы хотите, чтобы значения dict начинались с одного использования range(1,100)
l = [dict(zip([1],[x])) for x in range(1,100)]
Ответ 4
Просто поставьте dict = {}
внутри цикла.
>>> dict = {}
>>> list = []
>>> for x in range(0, 100):
dict[1] = x
list.append(dict)
dict = {}
>>> print list