字典
字典基础:
声明一个变量,保存一个学生的信息:
stu = {'姓名':'ff','年龄':3,'性别':'男','电话':'123456','身高':181,'体重':75,'成绩':100}
print(stu['姓名']) #ff
字典是容器型数据类型,将{}作为容器的标志,多个元素用,隔开()字典的元素都是键值对
如何表示:{键1:值1,键2:值2,…}
字典是可变的(支持增删改),字典是无序的(不支持下标操作)
什么时候使用字典:
a. 需要同时保存多个数据
b. 多个数据的意义不同(需要区分)
字典对元素的要求:字典中的元素都是键值对
键 - 不可变;必须是唯一的(一般是字符串)
值 - 任何类型的数据,且可以重复
字典在保存数据的时候,真正想要保存的是值,键使用来对值进行区分的.
空字典:
dict = {}
dict1 = {2:3,5:4}
print(dict1) #{2: 3, 5: 4}
字典的key不可变
dict2 = {[1,2]:100,'abc':200}
print(dict2) #TypeError: unhashable type: 'list'
dict2 = {'a':10,'b':20,'a':100}
print(dict2) #TypeError: unhashable type: 'list'
证明字典的无序:
print({'a':'b','c':'d'} == {'c':'d','a':'b'}) #True,证明无序
1) 获取单个元素对应的值
a. 字典[key] - 获取字典中指定key对应的值,如果key不存在会报错.
dog = {'name':'大黄','age':3,'breed':'土狗','gender':'公狗','weight':10}
print(dog['name']) #大黄
print(dog['age']) #3
print(dog['height']) #KeyError: 'height'
b. 字典.get(key) - 获取字典中指定key对应的值,如果key不存在不会报错,返回None
字典.get(key,默认值) - 获取指定key对应的值,若key不存在的时候,返回默认值
dog = {'name':'大黄','age':3,'breed':'土狗','gender':'公狗','weight':10}
print(dog.get('breed')) #土狗
print(dog.get('height')) #None
print(dog.get('age',0)) #3
print(dog.get('height',40)) #40
2) 遍历
a. 需要掌握和使用的遍历方法
for 变量 in 字典:
循环体
注意:变量取到的是字典中所有的key
dog = {'name':'大黄','age':3,'breed':'土狗','gender':'公狗','weight':10}
for i in dog:
print(i) #name,age,breed,gender,weight
print(i,dog[i]) #name 大黄,age 3,breed 土狗,gender 公狗,weight 10
b. 其他两种情况1(不方便)
for 变量 in 字典.values():
循环体
变量取到的是字典中所有的值
dog = {'name':'大黄','age':3,'breed':'土狗','gender':'公狗','weight':10}
for i in dog .values():
print(i) #大黄,3,土狗,公狗,10
c. 其他情况2:
for 变量1,变量2 in 字典.items():
循环体
变量1能取到字典所有的key,变量2取到的是字典所有的值
dog = {'name':'大黄','age':3,'breed':'土狗','gender':'公狗','weight':10}
for x,y in dog.items():
print(x,y) #name 大黄,age 3,breed 土狗,gender 公狗,weight 10
print(dog.items()) #dict_items([('name', '大黄'), ('age', 3), ('breed', '土狗'), ('gender', '公狗'), ('weight', 10)])
print(list(dog)) #['name', 'age', 'breed', 'gender', 'weight']
练习1:声明一个变量同时保存四个学生的信息(每个学生包含:姓名,年龄,电话,成绩)
stu = [{'name':'a','age':18,'tel':'123','score':98},{'name':'b','age':17,'tel':'456','score':95},{'name':'c','age':19,'tel':'789','score':93},{'name':'d','age':20,'tel':'101112','score':100}]
练习2:统计上面四个学生中未成年的个数
n = 0
for i in stu:
if i.get('age') < 18:
n += 1
print('未成年的个数:',n)
字典元素的增删改:
语法1:
字典[key] = 值
如果key本来就存在,就将key对应的值修改成指定的值(改)
如果key不存在,以’key:值’的形式添加一个键值对(增)
movie = {'name':'西游记','time':'1978-10-23','dirctor':'吴承恩'}
print(movie) #{'name': '西游记', 'time': '1978-10-23', 'dirctor': '吴承恩'}
改:
movie['time'] = '1999-12-13'
print(movie) #{'name': '西游记', 'time': '1999-12-13', 'dirctor': '吴承恩'}
增
movie['score'] = 9.8
print(movie) #{'name': '西游记', 'time': '1999-12-13', 'dirctor': '吴承恩', 'score': 9.8}
语法2:
字典.setdefault(键,值) - 添加键值对(不存在修改的功能)
movie.setdefault('score',8.0)
print(movie) #score:9.8
movie.setdefault('type','神话')
print(movie) #{'name': '西游记', 'time': '1999-12-13', 'dirctor': '吴承恩', 'score': 9.8, 'type': '神话'}
1) del
del 字典[key] - 删除指定key对应的键值对(key不存在会报错)
movie = {'name': '西游记', 'time': '1999-12-13', 'dirctor': '吴承恩', 'score': 9.8, 'type': '神话'}
del movie['dirctor']
print(movie) #{'name': '西游记', 'time': '1999-12-13', 'score': 9.8, 'type': '神话'}
2) pop
字典.pop(key) - 取出字典中指定key对应的值,并且返回被取出的值
movie = {'name': '西游记', 'time': '1999-12-13', 'dirctor': '吴承恩', 'score': 9.8, 'type': '神话'}
value = movie.pop('type')
print(movie,value) #{'name': '西游记', 'time': '1999-12-13', 'dirctor': '吴承恩', 'score': 9.8} 神话
字典的相关操作和方法
字典不支持加法和乘法运算
1) 比较运算
字典只支持比较相等,不支持比较大小
print({'a':1,'b':2} == {'b':2,'a':1}) #True
2) in和not in
判断的是key
数据 in 字典 - 判断字典中是否存在指定的key
数据 not in 字典 - 判断字典中是否不存在指定的key
cat = {'name':'拉面','age':2,'color':'白色'}
print('name' in cat) #True
print('拉面' in cat) #False
3) 相关函数
a. len(字典) - 统计字典中键值对的个数
print(len(cat)) #3
b. dict(数据) - 将指定的数据转换成字典
数据的要求:1.是容器型数据类型 2.数据中的元素是有且只有两个元素的容器(小容器) 3.小容器中的第一个元素是不可变的
x = [(1,2),(3,4),(5,6)]
print(dict(x)) #{1: 2, 3: 4, 5: 6}
x = ('ab','cd','ef',['name','zhangsan'])
print(dict(x)) #{'a': 'b', 'c': 'd', 'e': 'f', 'name': 'zhangsan'}
c. 字典转换成其他的数据类型
bool(字典) - 空字典是False,非空即转换成True
list(字典) - 把字典所有的key作为列表的元素
tuple(字典) - 将字典所有的key作为元组的元素
1) 字典.clera() - 清空字典
cat.clear()
print(cat) #{}
2) 字典.copy() - 复制字典产生一个新的字典并且返回
cat = {'name':'拉面','age':2,'color':'白色'}
cat1 = cat.copy()
print(cat1) #{'name': '拉面', 'age': 2, 'color': '白色'}
3) dict.fromkeys()
dict.fromkeys(序列) - 创建字典,字典中的每个key就是序列中的元素,值都是None
dict.fromkeys(序列,值)
print(dict.fromkeys('abc')) #{'a': None, 'b': None, 'c': None}
stu = dict.fromkeys(['name', 'age', 'gender', 'tel'])
stu1 = stu.copy()
massage = ['zhangsan','lisi','wangwu']
for name in massage:
new_stu = stu.copy()
new_stu['name'] = name
print(new_stu)
{'name': 'zhangsan', 'age': None, 'gender': None, 'tel': None}
{'name': 'lisi', 'age': None, 'gender': None, 'tel': None}
{'name': 'wangwu', 'age': None, 'gender': None, 'tel': None}
stu = dict.fromkeys(['name', 'age', 'gender', 'tel'],0)
print(stu) #{'name': 0, 'age': 0, 'gender': 0, 'tel': 0}
4) items,keys,values
字典.keys() - 获取字典所有的key,返回一个容器(这个容器不是列表)
字典.values() - 取字典所有的值,返回一个容器(这个容器不是列表)
字典.items() - 获取字典所有的key和值,返回一个容器,容器中的元素是元组,每个元组对应一个键值对,这个容器不是列表
cat = {'name':'拉面','age':2,'color':'白色'}
print(cat.keys()) #dict_keys(['name', 'age', 'color'])
print(cat.values()) #dict_values(['拉面', 2, '白色'])
print(cat.items()) #dict_items([('name', '拉面'), ('age', 2), ('color', '白色')])
5) update
字典.update(序列) - 用序列生成的字典去更新原字典(更新方式:不存在就添加,存在就修改.)
dict = {1:2,3:4}
dict.update({1:200,3:400,5:600}) #{1: 200, 3: 400, 5: 600}
print(dict)