数据类型划分:
可变数据类型:list、dict、set 不可哈希
不可变数据类型:tuple、bool、int、str 可哈希
字典
python内置了字典类型,使用键-值(key - value) 存储,具有极快的查找速度;
key:必须是 不可变数据类型
value:任意数据类型
dict 优点:
二分查找效率快
存储大量的关系型数据
特点:字典是无序的
dict的增删改查
1. 增加
(A) dic1['key'] = value 没有键值对,则添加;如果键,则值覆盖。
dic1 = {"name": "hkey", "age": 18, "sex": "male"}
dic1["heigh"] = 185
dic1['name'] = 'jay'
print(dic1)
# 执行结果:
# {'age': 18, 'sex': 'male', 'name': 'jay', 'heigh': 185}
(B) set_default() 有键值对,不做任何改变,没有才添加。
dic = {'name':'jay', 'age':18, 'sex': 'male'}dic.setdefault('age', 20) # 存在不修改,不报错
dic.setdefault('heigh', 180) # 不存在修改。
print(dic)# 执行结果:
# {'sex': 'male', 'heigh': 180, 'age': 18, 'name': 'jay'}
2. 删除
(A) pop(key, None) 删除键值对,并返回值。如果字典中没有删除的key,则返回 None
dic = {'name':'jay', 'age':18, 'sex': 'male'}
t1 = dic.pop('name') # 当 key 存在时,删除字典中的key-value并返回value值给 t1
print(t1)
print(dic)# 执行结果:
# jay
# {'sex': 'male', 'age': 18}dic = {'name':'jay', 'age':18, 'sex': 'male'}
t1 = dic.pop('name1111', None) # 当 key 不存在时,则返回定义的第二个参数给 t1
print(t1)
# 执行结果:
# None
(B) popitem() 随机删除并返回删除元组,元组里面是删除的键值对
dic = {'name':'jay', 'age':18, 'sex': 'male'}t1 = dic.popitem() # 随机删除key-value 并作为元组返回给 t1
print(t1, type(t1))
print(dic)# 执行结果:
# ('name', 'jay') <class 'tuple'>
# {'sex': 'male', 'age': 18}
(C) del 删除键值对或者整个字典
dic = {'name':'jay', 'age':18, 'sex': 'male'}
del dic['name'] # 删除字典中的键值对
del dic # 直接删除整个字典
3. 修改
(A) update 合并两个字典
dic = {'name':'jay', 'age':18, 'sex': 'male'}
dic2 = {'name1':'hkey', 'age1': 20}dic.update(dic2) # 将dic2作为参数合并到dic中,dic变,dic2不变print('dic:', dic)
print('dic2:', dic2)# 执行结果:
# dic: {'age': 18, 'name': 'jay', 'sex': 'male', 'name1': 'hkey', 'age1': 20}
# dic2: {'age1': 20, 'name1': 'hkey'}
4. 查询
(A) dic.keys 字典key的组合,可以当成list类型来处理
(B) dic.values 字典value的组合,可以当成list类型来处理
(C) dic.items 字典(key, value)的组合,可以当做元组来处理
dic = {'name':'jay', 'age':18, 'sex': 'male'}print(dic.keys())
print(dic.values())
print(dic.items())# 执行结果:
# dict_keys(['age', 'sex', 'name'])
# dict_values([18, 'male', 'jay'])
# dict_items([('age', 18), ('sex', 'male'), ('name', 'jay')])keys()、values()、items() 一般用for来遍历for k in dic: # 循环 key 值print(k)for v in dic.values(): # 循环 value 值print(v)for k, v in dic.items(): # 循环key, value 值print(k, v)
(D) dic.get() 存在则返回 value值,不存在就返回预设值
dic = {'name':'jay', 'age':18, 'sex': 'male'}
print(dic.get('name'))
print(dic.get('name111', None))# 执行结果:
# jay
# None
练习题:
s1 = 'asdf123sdfer45sdf3'
统计 s1 出现数字的次数,连续的数字算一个数字;
s1 = 'asdf123sdfer45sdf3'for i in s1: # 循环整个 s1 字符串if i.isalpha(): # 当单个字符串是字母的时候,就将字母替换成空格s1 = s1.replace(i, ' ')li = s1.split() # 通过空格将字符串 s1 分隔成列表
print(len(li)) # 直接统计列表元素的个数# 执行结果:
# 3