我认为这将是一个简单的答案,我只是遗漏了一些东西。我有一个包含几个词典的列表。因此,对于简化示例,数据结构如下:
acctList = [{'acctid' : '101'},{'acctid' : '102'}, {'acctid' : '103'}]
我想用新值更新列表中的词典。但是当我做这样的事情时:
acctList[0].update({'acctid' : 'aaa'})
列表中的所有字典都使用新值而不是索引0处的字典进行更新。我知道列表也使用update,所以我不知道如何指定我正在尝试更新字典而不是列表项。有任何想法吗?提前谢谢!
答案 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中,当您需要一个无法更改的指针时,可变对象有时用于保持和递增整数,因此您不能使用普通整数。