词典访问并创建具有可变值的新键

时间:2020-01-28 00:27:40

标签: python

这很奇怪,我可以创建一个新密钥,并使用变量xz进行读取,如下所示。 那么,当我使用x来读取密钥时,为什么不能在索引中进一步做同样的事情?这是一个错误吗?如何做到这一点?

>>> dict = { 'a':'', 'b':''}
>>> x = 'a'
>>> dict[x]
''
>>> dict[x] = 0
>>> dict[x]
0
>>> dict
{'a': 0, 'b': ''}
>>> z = 'c'
>>> dict[z] = 1
>>> dict
{'a': 0, 'b': '', 'c': 1}
>>>
>>> dict[x][z] = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object does not support item assignment
>>> dict[x][z] = {'c':''}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object does not support item assignment
>>> dict[x]['d'] = {'c':''}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object does not support item assignment

2 个答案:

答案 0 :(得分:3)

在最后一行,dict[x] = dict['a'] = 00只是一个整数-没有0['c']这样的东西,所以没有0[z]这样的东西,所以也没有dict[x][z]这样的东西。

答案 1 :(得分:1)

您的问题

>>> dict['a']
0
>>> dict
{'a': 0, 'b': ''}

>>> dict['c'] = 1
>>> dict
{'a': 0, 'b': '', 'c': 1}

执行dict['a']时,您将收到整数0,因此

>>> dict['a']['c'] = 1

等同于

>>> 0['c'] = 1

哪个返回您看到的错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not subscriptable

可能的解决方案

可以通过将dict放在dict中来实现“嵌套”密钥检索:

>>> data = {'a': {'b': 1}, 'c': 0}
>>> data
{'a': {'b': 1}, 'c': 0}

>>> data['a']['b'] = 5
>>> data
{'a': {'b': 5}, 'c': 0}

您也可以通过在原始data['a']初始化后将dict设置为dict来执行上述操作。

>>> data = {'a': 0, 'b': 1}
>>> data
{'a': 0, 'b': 1}

>>> data['a'] = {'c': 2}
>>> data
{'a': {'c': 2}, 'b': 1}

>>> data['a']['c'] = 4
>>> data
{'a': {'c': 4}, 'b': 1}

可能的困惑

当您使用str作为dict中的值时,可能会引起混淆。

>>> data = {'a': "Hello World"}
>>> data
{"a": 'Hello World'}

在这种情况下,您可以执行“嵌套索引”:

>>> data['a'][10]
'd'

但这等同于

>>> "Hello World"[10]
'd'

侧注

请勿将变量设置为Python's built-in functions的名称-在您的情况下,请使用名称dict