Странная ошибка: List.append в Python стирает прецедентный ввод и клонирует новый вместо каждого - PullRequest
0 голосов
/ 02 октября 2019

Хорошо, я много раз работал со списком в Python, и я впервые сталкиваюсь с этой проблемой: Рядом со странным местом, где я получил это (упрощенно)

list = []
dict = {}
things = {'1':'Am', '2':'I', '3':'Dumb?'}
[...]

for key,value in things.items():
    if value:
        dict[key]=value

        print(dict)
        list.append(dict)
        print(list)

И получите эторезультат:

{'1':'Am'}
[{'1':'Am'}]
{'2':'I'}
[{'2':'I'},{'2':'I'}]
{'3':'Dumb?'}
[{'3':'Dumb?'},{'3':'Dumb?'},{'3':'Dumb?'}]

хинхин, кто-нибудь когда-нибудь получал это? Я застрял, спасибо, я:)

1 Ответ

1 голос
/ 02 октября 2019

Это , а не ошибка. Вы просто добавляете в список словарь один и тот же несколько раз. В результате, если вы будете манипулировать этим словарем, вы увидите изменения во всех элементах списка, так как все они относятся к одинаковому словарю.

Вы должны создать new Словарь каждой итерации, например, с:

result = []
things = {'1':'Am', '2':'I', '3':'Dumb?'}

for key, value in things.items():
    if value:
        result.append(<b>{key: value}</b>)
    print(list)

Или с простым пониманием списка:

result = [{k: v} for k, v in things.items() if v]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...