更新列表中的词典

时间:2014-03-02 22:52:04

标签: python dictionary

我认为这将是一个简单的答案,我只是遗漏了一些东西。我有一个包含几个词典的列表。因此,对于简化示例,数据结构如下:

acctList = [{'acctid' : '101'},{'acctid' : '102'}, {'acctid' : '103'}]

我想用新值更新列表中的词典。但是当我做这样的事情时:

acctList[0].update({'acctid' : 'aaa'})

列表中的所有字典都使用新值而不是索引0处的字典进行更新。我知道列表也使用update,所以我不知道如何指定我正在尝试更新字典而不是列表项。有任何想法吗?提前谢谢!

1 个答案:

答案 0 :(得分:2)

您需要创建词典,以便在列表的每个索引中都有一个唯一的词典,例如:

acctList = [dict(acctid=str(i)) for i in range(101, 104)]

和acctList是:

[{'acctid' : '101'},{'acctid' : '102'}, {'acctid' : '103'}]

然后你可以单独修改每一个而不影响其他人:

>>> acctList[0].update(dict(acctid='10101'))
>>> acctList
[{'acctid': '10101'}, {'acctid': '102'}, {'acctid': '103'}]

说明:

当您创建一个列表,其中每个索引指向同一个对象,并且该对象是可变的时,在一个地方进行更改会影响其余部分,因为它们都是相同的对象:

>>> l = [[]]*4
>>> l[0].append('foo')
>>> l
[['foo'], ['foo'], ['foo'], ['foo']]

由于整数是不可变的,因此您可以执行以下操作:

>>> l = [0]*4
>>> l
[0, 0, 0, 0]
>>> l[0]+=1
>>> l
[1, 0, 0, 0]

在Python中,当您需要一个无法更改的指针时,可变对象有时用于保持和递增整数,因此您不能使用普通整数。