Python字典没有分配所有键或项目

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),则认为键是相同的.

  • 我希望`dict`文字中的同一个键的多个实例导致运行时错误. (4认同)

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 TrueFalse可以重新分配,因此这种行为不能得到保证.


Goi*_*Way 5

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)