布尔键与字典中的其他数据类型

Bad*_*der 2 python dictionary

我正在浏览一些python字典链接并找到了这个.

我似乎无法理解下面发生了什么.

dict1 = {1:'1',2:'2'}
print dict1
Run Code Online (Sandbox Code Playgroud)

产量

{1:'1',2:'2'}
Run Code Online (Sandbox Code Playgroud)

但是如果我在字典中添加一个布尔键,它会给出一些奇怪的东西.

dict2 = {True:'yes',1:'1',2:'2'}
print dict2
Run Code Online (Sandbox Code Playgroud)

产量

{True:'1',2:'2'}
Run Code Online (Sandbox Code Playgroud)

只有在字典中包含布尔值时才会发生吗?

Pru*_*une 5

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

您看到的标签(例如,True vs 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}
Run Code Online (Sandbox Code Playgroud)

请注意这是如何工作的:每个字典条目显示每个给定值的第一个标签(0/False和1/True).与任何赋值一样,显示的值是最后一个.