d = {}
d['agency name'] = 0,{}
d['agency name'][1]['contractor 1'] = 0
d['agency name'][1]['contractor 2'] = 0
d['agency name'][1]['contractor 3'] = 0
print(d)
# the following line of code generates this error message:
# TypeError: 'tuple' object does not support item assignment
# why?
# what is the correct assignment statement to update an integer stored
# in the dictionary at d['agency name'][0]?
# error line
d['agency name'][0] = 1
# end error line
d['agency name'][1]['contractor 1'] = 1
print(d)
这是因为元组是不可变的对象,你不能改变它们的元素(它的值是不可改变的!
>>> d['agency name']
(0, {'contractor 1': 1, 'contractor 3': 0, 'contractor 2': 0})
如您所见d['agency name']
是一个元组,因此您无法更改其值!
如果你想改变这个值,你可以使用一个可变的对象,如列表作为一个容器:
>>> d = {}
>>> d['agency name'] = [0,{}]
>>> d['agency name'][1]['contractor 1'] = 0
>>> d['agency name'][1]['contractor 2'] = 0
>>> d['agency name'][1]['contractor 3'] = 0
>>> d['agency name'][0] = 1
>>> d
{'agency name': [1, {'contractor 1': 0, 'contractor 3': 0, 'contractor 2': 0}]}
分配后无法更改元组的值。因此,首先为索引 1 处的元组项目创建一个临时字典。
d = {}
temp_d = {
'contractor 1': 0,
'contractor 2': 0,
'contractor 3': 0,
}
d['agency name'] = 0, temp_d
在python中,元组是不可变的,这意味着你不能改变元组内的值。解决此问题的一种方法是使用旧元组的值创建一个新元组,但要更改的值除外。
d['agency name'] = (0,) + d['agency name'][1:]
[1:]
返回相同的元组,不包括第一个值。有了这个,你可以从元组(0,)
构建一个新的元组,以及旧元组[1:]
的一部分。效果是一样的。
与项目分配相比,这是一个缓慢的解决方法。如果您经常执行项目分配,则应考虑改用支持项目分配的列表。