字典:字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是唯一的. 在保存的时候, 根据key来计算出一个内存地址. 然后将key-value保存在这个地址中.这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key必须是可hash的,同时在一个字典中键是唯一的。目前可哈希的数据类型:int、str、tuple、bool。不可哈希的数据类型:list、dict、set。
语法:{key1: value1, key2: value2....} 注:键值对是无序的,故不可以进行切片操作。
1.增
dict[key] = value 如果key不存在,就会新增一个键值对;如果key存在,就会替换对应的value。
dict.setdefault(key,value) 如果key不存在,会增加一个键值对;如果key存在,setdefault不会起作用。
2.删
dict.pop(key) 删除指定的key-value,同时返回对应的value
del dict[key] 删除指定的key-value
dict.popitem() 随机删除key-value,同时返回key-value。
dict.clear() 清空字典内容
3.改
dict[存在的key] = 新值,
d1.update(d2) 把d2中的内容更更新到d1中. 如果key重名. 则修改替换. 如果不存在key, 则新增.
4.查
dict[key] 可以直接查,若key不存在,会报错。
dict.get(key) 直接查,若key不存在,返回None,或者dict.get(key,返回值),设定返回值。
dict.setdefault(key,value) 如果key不存在,会增加一个键值对,同时返回对应的值;如果key存在,返回本身存在的value。
5.其他相关操作
dict.keys() 获取到字典所有的key,然后存在一个高仿的列表中,可以用for循环遍历
dict.values() 获取到字典所有的value,然后存在一个高仿的列表中
dict.items() 获取到字典所有的键值对,然后以元组的形式存在一个高仿的列表中
解构\解包 a, b = 1, 2; a, b = (1, 2);a, b = [1, 2] 循环遍历元组等时更方便
6.字典的嵌套
eg:dic1 = {
"name": "小明",
"age": 28,
"wife": {
"name": '小红',
"age": 28
},
"children": ['第⼀个毛孩', '第⼆个⽑孩'],
}
print(dic1.get("wife").get("name"))
print(dic1.get("children"))
print(dic1.get("children")[1])
7.==和is的区别
== 比较两边变量的值是否相等
is 比较两边变量的内存地址是否相等 注:查询变量地址print(id(变量))
补充is使用时地址:
# 数字小数据池的范围 -5 ~ 256,当数字在这范围内,is两边地址相等
# 字符串中如果有特殊字符他们的内存地址就不一样
# 字符串中单个*20以内他们的内存地址一样,单个*21以上内存地址不一致
注:两者的区别只能在终端执行时才可以对比出来,pycharm不可以,一个py文件中所有相同的字符串一般都是使用一样的内存地址。
8.编码和解码
encode(编码方式) ---- 拿到明文编码后对应的字节
decode(解码方式) -----将编码后的字节解码成对应的明文
注:用什么进行编码就要用什么进行解码 ,否则会出现乱码。
补充:
python3中程序运行阶段使用的是Unicode,可以显示所有内容。pycharm存储的时候默认使用utf-8类型。
数据传输和存储都是使用bytes类型。
编码知识:
ascii 码:
不支持 中文
支持 英文 数字 符号
8位 一个字节
gbk码 国标:
支持 中文,英文,数字,符号
英文 16位 二个字节
中文 16位 二个字节
unicode 万国码
支持 中文,英文,数字,符号
英文 32 位 四个字节
中文 32位 四个字节
utf-8 长度可变的万国码 最少用8位
英文 8位 一个字节
中文 24位 三个字节