当True、False和数字作为dict的key时
Python的字典(dict)是很常用的,但字典的key的选用是需要注意的,并不是所有数据类型都可以作为字典的key;当True、False和数字作为dict的key时会发生「诡异」的事。
什么数据类型可以作为Python字典的key?
只有可散列的数据类型才能用作字典的key。可散列的数据类型包括:
- 原子不可变数据类型: str、bytes、True、False和数值类型
- frozenset(不可变集合)
- 包含的所有元素都是可散列类型的元组(tuple)
第三种尤其要注意,不是所有的元组都可以作为字典的key。
当True、False和数字作为dict的key时:
示例1:
>>> {True: 'True', 1: '1', 1.0: '1.0', 1.00: '1.00'}
>>> {False: 'False', 0: '0', 0.0: '0.0', 0.00: '0.00'}
想想上面的输出结果是什么?
答案是:
{True: '1.00'}
{False: '0.00'}
示例2:
>>> {2.10: '2.10', 2.100: '2.100', 2.1: '2.1', 2.1000: '2.1000'}
>>> {1.0: '1.0', 1: '1', 1.00: '1.00', 1.000: '1.000'}
想想上面的输出结果是什么?
答案是:
{2.1: '2.1000'}
{1.0: '1.000'}
注意上面这个答案的key,为什么是2.1和1.0而不是其它的key?代码在Python2.7和Python3.6结果相同。
综上,当True、False和数字作为dict的key时,可能会产生非预期的结果,这点需要警惕,当然一般很少会同时把bool和数字当做key,但最好是避免用bool或数值类型当作key。