Инкремент элемента в словаре списка в Python - PullRequest
3 голосов
/ 08 марта 2012

У меня есть этот тривиальный код:

M = dict.fromkeys([0, 1, 2, 3, 4], [0, 0])
M[0][1] += 2
print(M)

Почему это выход?

{0: [0, 2], 1: [0, 2], 2: [0, 2], 3: [0, 2], 4: [0, 2]}

Это увеличивает все элементы списков в словаре! Я хочу увеличить только второй элемент списка с ключом 0, примерно так:

{0: [0, 2], 1: [0, 0], 2: [0, 0], 3: [0, 0], 4: [0, 0]}

1 Ответ

10 голосов
/ 08 марта 2012

все значения в M указывают на точно такой же список . Доказательство:

>>> map(id, M.values())
[139986331512912, 139986331512912, 139986331512912, 139986331512912, 139986331512912]

Если вы измените его, это повлияет на все клавиши. Попробуйте создать новый список для каждого ключа:

>>> M = { k:[0,0] for k in [0, 1, 2, 3, 4] }
>>> M[0][1] += 2
>>> print(M)
{0: [0, 2], 1: [0, 0], 2: [0, 0], 3: [0, 0], 4: [0, 0]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...