数据类型划分:可变数据类型,不可变数据类型
不可变数据类型 :元祖,bool,int,str,可哈西
可变数据类型:list,dict,set 不可哈西
dict的key:必须是不可变数据类型
dict的value:任意数据类型
dict优点: 二分查找,存储大量关系型数据,
dict特点:在3.5版本之前是无序的,在3.6版本及以后是有序的
dic = {
'name': ['大飞', '小飞'],
'py': [{'num': 7,
'avg_age': 16}],
True: 1,
(1, 2, 3): 'jerry',
2: '二哥',
}
1.字典操作:增添
直接添加:对于已经存在的key会覆盖掉之前的value
setdefault(key, value ):若已经存在了key不会覆盖之前的value
dic1 = {"name": "jerry", "age": 18, "sex": "male", }
dic1["high"] = 185 # 没有的key增加
dic1["age"] = 16 # 已有的key覆盖
dic1.setdefault("weight", 100) # 没写value默认为None
dic1.setdefault("age", 20) # 若已经存在key不做覆盖
print(dic1)
2.字典操作:删除
pop(key, 自定义返回值):会返回删除的value值,如果没有传入参数会报错,返回值可以自动以,如果没有找到对应的key值,需要设置自定义返回值。自定义值只有在找不到对应key时,才会代替返回值
popitem():无参数,在3.5之前的版本为随机删除,在3.6之后的版本为默认删除最后一个key
clear():清除整个字典
del dic[‘name’ ]:作为关键字根据key值来删除,找不到会报错,所以不常用
print(dic2.pop("age")) # 有返回值为删除的value
print(dic2.pop("hallo", '没有此键')) # 删除不知道有没有的key时,可设置返回值None
# print(dic2.pop()) # 如果没有传参数会直接报错
# print(dic2)
# print(dic2.popitem()) # 删除最后一个
# dic2.clear() # 清空
# del dic2['name1'] # 没有该key会报错所以不常用
del dic2 # 删除整个字典,使dic2不存在
print(dic2)
3.字典操作:修改
直接修改:类似于增添针对存在的key值会覆盖原始的value
dic2.update(dic1)会表把字典dic1中有但是dic2中没有的key添加到dic2中,已经存在于两个字典的key,则将dic1中的value复制到dic2中
dic1["age"] = 16 # 已有的key覆盖
dic = {'name': "Tony", 'wight': 120, }
dic1 = {"name": "jerry", "age": 18, "sex": "male", }
dic.update(dic1)
4.1字典操作:查询
直接查询:字典的key,value的值为列表,如果查询item为元组类型
dic1 = {"name": "jerry", "age": 18, "sex": "male", }
print(dic1.keys(), type(dic1.keys())) # 列表
print(dic1.values(), type(dic1.values())) # 列表
print(dic1.items(), type(dic1.items())) # 元组
for i in dic1: # 默认打印出的是key
print(i)
for i in dic1.values():
print(i)
4.2插入一个面试赋值题:一行代码修改a,b的赋值,赋值语句会自动判断前后的变量数目来确定后面的最小单位。
a = 1
b = 2
a, b = b, a
print(a, b)
a, b = [1, 2] # 相当于自动识别,判断最小单位,一一对应
a, b = [1, 2], [2, 3]
4.3同理就可以去除掉字典中item的括号
for a,b in dic1.items():
# a, b = i
print(a,b)
4.4字典查询:get()
直接查询:如果没有找到相应key值会报错
get(key, 自定义返回值)类似与删除的pop()如果没有找到相对应的key值,可以自顶一个返回值,这样可以避免报错的发生,比较实用
# print(dic["name1"]) # 找不到会报错
print(dic.get('name1', '没有这个键')) # 找不到不会报错
5.字典嵌套:字典中可以嵌套各种其他类型数据
dic = {
'name': ['jerry', 'tony', 'hello'],
'py': {
'time': '5.4',
'money': 15000,
'addr': 'CBD',
},
'age': 21,
}
dic['age'] = 45
dic['name'].append('jake')
dic['name'][1] = dic['name'][1].upper()
print(dic['name'])
dic['py'].setdefault('weather', 'sunny')
print(dic['py'])
6.作业示例:将一段字符串中的数字个数计算出来,包括连在一起的多位数字按一个处理。
解决思路:将字母类型的诗句全部替换为空然后再按空分割,最后计算分出的个数即可
info = input('>>>') # asdasd123asdqwe7845dsa56
for q in info:
if q.isalpha():
info = info.replace(q, ' ')
l = info.split()
print(len(l))
7.在字典中删除key中包括‘k ’的元素:字典是无法再for循环中删除元素的
# 新建字典存值
dic1 = {'kl': 'a1', 'km': 'a2', 'ml': 'a3', }
dic2 = {}
for i in dic1:
if 'k' not in i:
dic2.setdefault(i, dic1[i])
else:
pass
print(dic2)
# 将被删key存入列表中在进行删除
dic1 = {'kl': 'a1', 'km': 'a2', 'ml': 'a3', }
li1 = []
for i in dic1:
if 'k' in i:
li1.append(i)
for j in li1:
dic1.pop(j)
print(dic1)
8.字典