2017-05-25 122 views
0

我正在浏览一些python字典链接并找到它。与字典中的其他数据类型的布尔键

我似乎无法理解底下发生了什么。

dict1 = {1:'1',2:'2'} 
print dict1 

输出

{1:'1',2:'2'} 

但是,如果我添加一个布尔关键字典,它给了一个很奇怪。

dict2 = {True:'yes',1:'1',2:'2'} 
print dict2 

输出

{True:'1',2:'2'} 

如果包括布尔到字典是否只发生?

回答

3

问题是True是一个值为1的内置枚举。因此,哈希函数将True看作简单的另一个1,并且......好吧,如你所见,这两者会对重新映射感到困惑。是的,有一些明确的规则描述了Python如何解释这些规则,但是在这个级别上你可能不关心过去False = 0和True = 1的任何事情。

您看到的标签(例如True和1)在第一个参考中设置。例如:

>>> d = {True:11, 0:10} 
>>> d 
{0: 10, True: 11} 
>>> d[1] = 144 
>>> d 
{0: 10, True: 144} 
>>> d[False] = 100 
>>> d 
{0: 100, True: 144} 

注意是如何工作的:每个字典条目显示第一标签是看到了每个给定值(0 /假,1/TRUE)。与任何分配一样,显示的值是最后一个。

+1

可能值得添加一个注释,它保证了最后一个值被取代,因为“{True:1,1:2,1:3}”变成了“{True:3}”,这个实际上可以用于某些事情 –

+1

这就是分配的工作原理;它只是不像字典构造公然。但是,我添加了注释并将其扩展到标签。 – Prune

0

Python dict是一个哈希映射 - 它通过哈希函数对其键进行索引,以在内存中进行快速查找。由于hash(1) is hash(True)的评估版本为True,因此Python认为它们几乎是同一个关键。因此,在Python中的任何类型的散列存储中都不能同时存在1True(即不执行自己的散列函数)。

相关问题