一、Hash
简介:
Hash,一般被翻译成“散列”,也有直接音译"哈希"的,就是把任意长度的输入,通过哈希算法,变换成固定长度的输出,输出的结果就叫做哈希值,这是一种压缩映射,也就是说一般哈希值的空间要小于输入空间,不同的输入但是得出的哈希值可能是相同的,所以不可能从哈希值来确定输入值,简单来说哈希就是将任意长度压缩为固定长度的函数。
特征:
Hash的值计算过程中是依据输入值的一些特性计算的,这就要求Hash值必须固定,因此被Hash的值必须是不可变的,如字符串、数字、元祖。不可为列表
用途:
- 文件签名
- MD5加密
- 密码验证
二、字典
简介:
字典是一种key -value的数据类型,通过key的值来获取value
基本语法:
info = { #大括号 ‘a‘:1,#用冒号隔断key value ‘b‘:2, ‘c‘:3 } print(info)
特性:
- key -value 结构
- key必须可哈希、且必须为不可变数据类型、必须唯一
- 可存任意多个值、可修改、可不唯一
- 无序
- 查找速度快
基本操作:
增加
info = { #大括号 ‘a‘:1,#用冒号隔断key 和 value ‘b‘:2, ‘c‘:3 } info[‘d‘] = [‘4‘,‘5‘] #可以增加列表 print(info)
# 结果 {‘a‘: 1, ‘b‘: 2, ‘c‘: 3, ‘d‘: [‘4‘, ‘5‘]}
删除
info = { ‘a‘:1, ‘b‘:2, ‘c‘:3 } info.pop("a")#删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。 print(info) #输出 {‘b‘: 2, ‘c‘: 3} #del删除 del info["a"] print(info) #输出 {‘b‘: 2, ‘c‘: 3}
info.popitem() #随机删除key的值
print(info)
#输出 {‘b‘: 2, ‘c‘: 3}
info.clear() #清空字典 print(info) #输出 {}
修改
info = { ‘a‘:1, ‘b‘:2, ‘c‘:3 } info[‘a‘] = 11 print(info) #结果{‘a‘: 11, ‘b‘: 2, ‘c‘: 3}
查找,查找有两种方法分别是
in
info = { ‘a‘:1, ‘b‘:2, ‘c‘:3 } print("a" in info) #输出 True info = { ‘a‘:1, ‘b‘:2, ‘c‘:3 } print("x" in info) #输出 False info = { ‘a‘:1, ‘b‘:2, ‘c‘:3 } print (info[‘x‘]) #如果取得键字典里面没有就会报错 #报错
get
info = { ‘a‘:1, ‘b‘:2, ‘c‘:3 } print (info.get(‘a‘)) #输出 1 info = { ‘a‘:1, ‘b‘:2, ‘c‘:3 } print (info.get(‘a‘)) #如果取得键字典里面没有也不会报错则会返回 None #输出 None
两种方法都可以满足查找的要求,但是建议使用get因为get查找的值如果不存在不会报错!
多级字典嵌套,字典里可以套字典,一层一层这个意思
info = { ‘a‘:{ ‘A‘:1, ‘B‘:2 }, ‘b‘:2, ‘c‘:3 } print(info) #输出 {‘a‘: {‘A‘: 1, ‘B‘: 2}, ‘b‘: 2, ‘c‘: 3}
values #以列表返回一个字典所有的值
{‘a‘: 1, ‘b‘: 2, ‘c‘: 3} >>> info.values() dict_values([1, 2, 3])
keys#以列表返回一个字典所有的键
>>> info.keys() dict_keys([‘a‘, ‘b‘, ‘c‘])
setdefault #和get 方法类似, 如果键不存在于字典中,将会添加键并将值设为默认值。
>>> info.setdefault(‘xiaoze‘,‘baliya‘) ‘maliya‘ >>> info {‘a‘: 1, ‘b‘: 2, ‘c‘: 3, ‘xiaoze‘: ‘maliya‘}
update#把字典dict2的键/值对更新到dict里。
>>> info {‘a‘: 1, ‘b‘: 2, ‘c‘: 3, ‘xiaoze‘: ‘baliya‘} >>> info_2 {‘A‘: 1, ‘b‘: 2, ‘c‘: [4, 5, 6]} >>> info.update(info_2) >>> info {‘a‘: 1, ‘b‘: 2, ‘c‘: [4, 5, 6], ‘xiaoze‘: ‘baliya‘, ‘A‘: 1}
items#以列表返回可遍历的(键, 值) 元组数组。
>>> info.items() dict_items([(‘a‘, 1), (‘b‘, 2), (‘c‘, [4, 5, 6]), (‘xiaoze‘, ‘baliya‘), (‘A‘, 1)])
fromkeys#用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值
>>> dict.fromkeys([1,2,3],‘test‘) {1: ‘test‘, 2: ‘test‘, 3: ‘test‘}
循环
#方法一
info = { ‘a‘:1, ‘b‘:2, ‘c‘:3 } for key in info: print(key,info[key]) #输出 a 1 b 2 c 3
#方法二
for key,y in info.items(): print(key,y) #输出 a 1 b 2 c 3
#使用第一种方法不是建议,第二种方法刚刚说过了是将字典转换为列表然后在循环打印,这样大大降低了效率!