Add*_*dem 26 python dictionary
我创建了以下字典
exDict = {True: 0, False: 1, 1: 'a', 2: 'b'}
Run Code Online (Sandbox Code Playgroud)
当我打印时exDict.keys(),它给了我一台发电机.好吧,所以我强迫它列入清单,它给了我
[False, True, 2]
Run Code Online (Sandbox Code Playgroud)
为什么不在那里?当我打印exDict.items()它给我
[(False, 1), (True, 'a'), (2, 'b')]
Run Code Online (Sandbox Code Playgroud)
有人猜测这里发生了什么?我很难过.
Joh*_*nck 28
发生这种情况是因为True == 1(并且False == 0,您没有0作为密钥).您将不得不以某种方式重构代码或数据,因为dict如果它们"相等"(而不是is),则认为键是相同的.
Ser*_*lis 12
你所看到的是python强迫1它等于True.
你会看到你打印的字典是:
False 1
True a
2 b
Run Code Online (Sandbox Code Playgroud)
其中值a应分配给1,而是将值True重新分配给a.
根据Python 3文档:
布尔类型是整数类型的子类型,布尔值在几乎所有上下文中的行为分别类似于值0和1,例外的是,当转换为字符串时,返回字符串"False"或"True" , 分别.
强调我的.
注:Python中2.X True和False可以重新分配,因此这种行为不能得到保证.
Python将1视为True.并且Boolean类型是整数类型的子类型
In [1]: a = {}
In [2]: a[True] = 0
In [3]: 1 in a.keys()
Out[3]: True
Run Code Online (Sandbox Code Playgroud)