python在list后面附加了一个dictornical,它改变了所有list元素

2024-04-20 11:51:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我要列表d = [{'name': 'Ada Lovelace'},{'name': 'Alan Turing'}]。你知道吗

但是字典变异了

    >>> a = ['Ada Lovelace','Alan Turing']
    >>> c = dict()
    >>> d = []
    >>> for i in a:
    ...    print c
    ...    print d
    ...    c['name'] = i
    ...    d.append(c)
    ...    print c
    ...    print d
    ... 
    {}
    []
    {'name': 'Ada Lovelace'}
    [{'name': 'Ada Lovelace'}]
    {'name': 'Ada Lovelace'}
    [{'name': 'Ada Lovelace'}]
    {'name': 'Alan Turing'}
    [{'name': 'Alan Turing'}, {'name': 'Alan Turing'}]

Tags: namein列表for字典dictprint变异
2条回答

你一次又一次地重复使用同一本词典。在循环中创建一个新的字典:

for i in a:
    c = {'name': i}
    d.append(c)

将一个对象附加到一个列表中并不会创建一个副本;它只是在列表中存储对该对象的引用。你知道吗

通过反复使用同一个dict对象,您只需将多个引用附加到列表的一个字典中。你知道吗

使用字典文本语法和列表理解可以满足您的需要:

>>> names = ['foo','bar']
>>> d = [{'name': i} for i in names]
>>> d
[{'name': 'foo'}, {'name': 'bar'}]

相关问题 更多 >