字典

字典

字典基础:

  1. 什么是字典(dict)

声明一个变量,保存一个学生的信息:

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. 获取字典的值
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. 增/改 - 添加键值对/修改键值对
语法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. 字典的相关操作

字典不支持加法和乘法运算

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. 相关方法
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)
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值