被引用的字典键绝对必须吗?

时间:2014-11-06 22:49:30

标签: python dictionary key

只是好奇,做了一个有趣的观察,我离开了定义我的字典键而不必引用它们。我猜这是Python中的一个漏洞?

在样本中,而不是在REPL中,以下内容不会引发异常:

>>> {foo:'foo', bar:'bar'}
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
 NameError: name 'foo' is not defined

Pythonistas如何处理他们的密钥?你提倡不带引号或引用的密钥,为什么?

1 个答案:

答案 0 :(得分:7)

字典的键可以是任何hashable对象(字符串,整数,元组等):

>>> dct = {'a': 1, 1: 'a'}
>>> dct['a']
1
>>> dct[1]
'a'
>>>

引用密钥只是意味着密钥是字符串,与上面的'a'一样。


就你的主张而言:

  

我不必引用它们来定义我的键

我认为你的意思是你做了这样的事情:

dct = {key1: 1, key2: 'a'}

上面的代码确实没有什么特别之处。它只是意味着名称key1key2引用可编辑对象,现在它们成为字典的键。一个例子如下:

>>> 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号),请使用整数或浮点数或任何合适的数据。

简单地说,做一些对你的程序最有意义的事情。