只是好奇,做了一个有趣的观察,我离开了定义我的字典键而不必引用它们。我猜这是Python中的一个漏洞?
在样本中,而不是在REPL中,以下内容不会引发异常:
>>> {foo:'foo', bar:'bar'}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined
Pythonistas如何处理他们的密钥?你提倡不带引号或引用的密钥,为什么?
答案 0 :(得分:7)
字典的键可以是任何hashable对象(字符串,整数,元组等):
>>> dct = {'a': 1, 1: 'a'}
>>> dct['a']
1
>>> dct[1]
'a'
>>>
引用密钥只是意味着密钥是字符串,与上面的'a'
一样。
就你的主张而言:
我不必引用它们来定义我的键
我认为你的意思是你做了这样的事情:
dct = {key1: 1, key2: 'a'}
上面的代码确实没有什么特别之处。它只是意味着名称key1
和key2
引用可编辑对象,现在它们成为字典的键。一个例子如下:
>>> key1 = 'a'
>>> key2 = 1
>>> dct = {key1: 1, key2: 'a'}
>>> dct[key1]
1
>>> dct[key2]
'a'
>>> dct['a']
1
>>> dct[1]
'a'
>>>
另一方面,如果您的意思是使用内置的dict
来制作字典:
dct = dict(key1='a', key2=1)
然后你应该知道键是仍然正常的字符串:
>>> dct = dict(key1='a', key2=1)
>>> dct
{'key2': 1, 'key1': 'a'}
>>> dct[key1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'key1' is not defined
>>> dct['key1']
'a'
>>>
最后,关于你是否应该总是使用字符串键的问题,答案是它取决于。如果您需要密钥来保存只能表示为字符串的数据(例如人名),请使用字符串。如果您需要键来保存数字数据(例如id号),请使用整数或浮点数或任何合适的数据。
简单地说,做一些对你的程序最有意义的事情。