在以下字典使用中更新整数的正确赋值语句是什么?(Python 3.4.3)


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:]的一部分。效果是一样的。

与项目分配相比,这是一个缓慢的解决方法。如果您经常执行项目分配,则应考虑改用支持项目分配的列表。

最新更新