字典数据类型内置方法
一、作用
给值添加描述信息作用
二、定义方式
使用{}一逗号隔开加入键值对key,value,key为不可变类型(int,float,str,tup,bool)且key不可重复
info_dict = {'name': 'laowang', 'age': 18, 'height': 180, 'weight': 140}
info_dict1 = ({'name': 'laowang', 'age': 18, 'height': 180, 'weight': 140})
print(info_dict)
print(info_dict1)
结果:
{'name': 'laowang', 'age': 18, 'height': 180, 'weight': 140}
{'name': 'laowang', 'age': 18, 'height': 180, 'weight': 140}
逻辑思维
先打印
执行完之后(看值的结果)
多在纸上画
三、常用内置方法
主要方法
-
按key取值,即可删除也可以改变
info_dict = {'name': 'laowang', 'age': 18, 'height': 180, 'weight': 140} print(info_dict['name']) info_dict['age'] = 19 print(info_dict)
结果:
laowang
{'name': 'laowang', 'age': 19, 'height': 180, 'weight': 140} -
长度len()
info_dict = {'name': 'laowang', 'age': 18, 'height': 180, 'weight': 140} print(len(info_dict))
结果:
4
-
in/ not in 是根据key进行比较
info_dict = {'name': 'laowang', 'age': 18, 'height': 180, 'weight': 140} print('name' in info_dict)
结果:
True -
for循环默认打印key值
for i in info_dict: print(i)
结果:
name
age
height
weight -
keys/values/items/(items用的最多,一般和解压缩一起使用
info_dict = {'name': 'laowang', 'age': 18, 'height': 180, 'weight': 140}
print(info_dict.keys())
print(list(info_dict.values()))
print(info_dict.items())
print(list(info_dict.items()))
# 获取key和v
for k, v in info_dict.items():
print(k, v)
结果:
dict_keys(['name', 'age', 'height', 'weight'])
['laowang', 18, 180, 140]
dict_items([('name', 'laowang'), ('age', 18), ('height', 180), ('weight', 140)])
[('name', 'laowang'), ('age', 18), ('height', 180), ('weight', 140)]
name laowang
age 18
height 180
weight 140
-
删除del
dic = {'a': 1, 'b': 2} del dic['a'] print(f"dic.get('a'): {dic.get('a')}")
结果:
dic.get('a'): None
需要掌握
-
复制copy(),id不同
info_dict = {'name': 'laowang', 'age': 18, 'height': 180, 'weight': 140} print(info_dict.copy())
结果:
{'name': 'laowang', 'age': 18, 'height': 180, 'weight': 140}
-
删除pop
info_dict.pop('name') # 根据key删除
print(info_dict)
结果:
{'age': 18, 'height': 180, 'weight': 140}
- 删除默认一项
早期的时候字典是无序的,是随机删除的,但是 由于python3底层优化了字典,让字典看得貌似有序, 所以删除最后一个
info_dict = {'name': 'laowang', 'age': 18, 'height': 180, 'weight': 140}
info_dict.popitem()
print(info_dict)
结果:
{'name': 'laowang', 'age': 18, 'height': 180}
-
清除字典
info_dict = {'name': 'laowang', 'age': 18, 'height': 180, 'weight': 140} info_dict.clear() print(info_dict)
结果:
{}
-
get方法, 如果有,就返回真正的值,如果没有,默认返回none,可以指定返回结果,如果,不存在key,可以设置返回值
info_dict = {'name': 'laowang', 'age': 18, 'height': 180, 'weight': 140} print(info_dict.get('age')) print(info_dict.get('hobby')) print(info_dict.get('hobby', 'run'))
结果:
18
None
run
-
设置默认值 setdefault(),如果key不存在,将其和值添加进去,如果存在,不改变其值
info_dict = {'name': 'laowang', 'age': 18, 'height': 180, 'weight': 140}
info_dict.setdefault('hobby', 'run')
print(info_dict)
info_dict.setdefault('age', 34)
print(info_dict)
结果:
{'name': 'laowang', 'age': 18, 'height': 180, 'weight': 140, 'hobby': 'run'}
{'name': 'laowang', 'age': 18, 'height': 180, 'weight': 140, 'hobby': 'run'}
-
添加值update(),有重复key则会被覆盖掉,重新赋值
info_dict = {'name': 'laowang', 'age': 18, 'height': 180, 'weight': 140} info_dict.update({'hobby': 'run'}) print(info_dict)
结果:
{'name': 'laowang', 'age': 18, 'height': 180, 'weight': 140, 'hobby': 'run'} -
fromkeys有字典dict点出来的,快速造一个字典,默认值为None,也可以设置默认值
print(dict.fromkeys([12, 3, 4, 4, 5, 6]))
print(dict.fromkeys([12, 3, 4, 4, 5, 6], 'randy'))
结果:
{12: None, 3: None, 4: None, 5: None, 6: None}
{12: 'randy', 3: 'randy', 4: 'randy', 5: 'randy', 6: 'randy'}
- 词频统计
s='hello randy randy say hello hello hello '
l=s.split()
dic={}
for item in l:
if item in dic:
dic[item]+=1
else:
dic[item]=1
print(dic)
四、存在一个值还是多个值
多个值,值可以是多个类型,key必须是不可变类型,通常应该是不可变类型中的字符串类型
五、有序 or 无序
无序
六、可变 or 不可变
可变数据类型 (可变:值可变id不变并且不可哈希,不可变:值可变,id可变并且可以哈希)
七、总结
7.1 常用操作
- 按key存取值:可存可取
- 长度len
- 成员运算in和not in
- 删除del
- 键keys()、值values()、键值对items()
- 循环
7.2 常用方法
- get
- update
- fromkeys
- setdefault
'''
key 哈希处理 纯数字序列 哈希函数 哈希值
'a' --》 12 --》 3
'b' --》 14 --》 5
'c' --》 24 --》 6
'd' --》 21 --》 3
'''
1. 为什么key是可变数据类型
dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
dic['a']
2. 为什么key不能重名
dic = {'a':1, 'a':2} # key不能重名
print(dic['a'])
3. 字典为什么是乱序的
4. 散列表(哈希表)解决了什么问题
'''
1,2,3,4,,,6,,,7,,7,,,7,n n次
'''
'''
1,2,2,2,,2,,,,2,2,2
'''