ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第wu周

2021-04-18 14:30:00  阅读:188  来源: 互联网

标签:False wu key print hash True 字典


除了列表和字典之外,字典键几乎可以是我们目前学到的任何数据类型。如果我们使用列表或字典作为字典键,计算机会产生一个错误:

d_1 = {5: 'int',
       '5': 'string',
       3.5: 'float',
       False: 'Boolean'
       }
print(d_1)

输出结果:

{5: ‘int’, ‘5’: ‘string’, 3.5: ‘float’, False: ‘Boolean’}`

d_2 = {[1,2,3]: 'list'}
print(d_2)```
输出结果:

TypeError: unhashable type: ‘list’

d_3 = {{'key': 'value'}: 'dictionary'}
print(d_3)

输出结果:

TypeError: unhashable type: ‘dict’
(为了解释背后发生了什么,我们将在下面解释为什么会出现这个错误。然而,理解这一点对推进这项任务并不重要,所以可以直接跳到练习上。)

为了理解上面的错误消息,我们必须简要了解一下Python在背后做了什么。当我们填充一个字典时,Python试图在后台将每个字典键转换为一个整数(即使键不是整数,而是数据类型)。Python使用hash()命令进行转换:

print(hash(4))
print(hash('four'))
print(hash(3.32))
print(hash(True))

输出结果:

4
2181486046996535831
737869762948381699
1
由于稍后我们将能够理解的原因,hash()命令没有将列表和字典转换为整数,而是返回一个错误。注意,错误消息与我们尝试使用列表或字典作为键时的错误消息相同。

print(hash([1,2,3]))
输出结果:

TypeError: unhashable type: ‘list’

print(hash({‘key’: ‘value’}))
输出结果:

TypeError: unhashable type: ‘dict’
在填充字典时,还需要确保字典中的每个键都是唯一的。如果我们对两个或多个不同的值使用相同的键,Python只保留字典中的最后一个键值对,并删除其他的键值对——这意味着我们将丢失数据:

d_1 = {'a_key': 1,
       'another_key': 2,
       'a_key': 3,
       'yet_another_key': 4,
       'a_key': 5
       }
print(d_1)

输出结果:

{‘a_key’: 5, ‘another_key’: 2, ‘yet_another_key’: 4}
一个奇怪的“陷阱”是当我们将整数与布尔值混合作为字典键时。hash()命令将布尔值True转换为1,将布尔值False转换为0。这意味着布尔值True和False将与整数0和1发生冲突。字典键不再是惟一的了,在这种情况下,Python只保留最后一对键值对。

d_1 = {1: 'one', True: 'Boolean'}
d_2 = {False: 'Bool', 0: 'zero'}
d_3 = {0: 'zero', 1: 'one', 2: 'two', True: 'true', False: 'false'}
print(d_1)
print(d_2)
print(d_3)

输出结果:

{1: ‘Boolean’}
{False: ‘zero’}
{0: ‘false’, 1: ‘true’, 2: ‘two’}

标签:False,wu,key,print,hash,True,字典
来源: https://blog.csdn.net/qq_45999759/article/details/115828417

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有