将字典附加到列表中的python正在更改所有列表元素

时间:2014-02-01 18:58:23

标签: 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'}]

2 个答案:

答案 0 :(得分:3)

你一遍又一遍地重复使用同一个词典。在循环中创建一个 new 字典:

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

将对象附加到列表创建副本;它只是在列表中存储对该对象的引用。

通过一遍又一遍地重复使用相同的dict对象,您只需将对一个字典的多个引用附加到列表中。

答案 1 :(得分:0)

使用字典文字语法以及列表推导将满足您的需求:

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