这很奇怪,我可以创建一个新密钥,并使用变量x
和z
进行读取,如下所示。
那么,当我使用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
答案 0 :(得分:3)
在最后一行,dict[x]
= dict['a']
= 0
。 0
只是一个整数-没有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
。