python 字典

字典与列表的区别

列表和元组的使用缺点:当存储的数据要动态添加、删除的时候,我们一般使用列表,但是列表有时会遇到一些麻烦,定位元素比较麻烦

解决方案:既能存储多个数据,还能在访问元素的很方便的定位到需要的元素,采用字典

定义字典

dic = {}#空字典

字典往往都是成对出现的,要有键值对

语法:{键1:值1, 键2:值2, 键3:值3, ..., 键n:值n}

字典也是可变的,可以重复(值(value)可以重复,键(key)不可以),值可以是任意类型,键我们通常使用字符串,当然也可以使用其他不可变的数据类型。

这是字典的几种定义方式

# 【面试题】定义字典的方式有几种,举例说明
# 1. {key1:value1,key2:value2....}         
# 2. 字典[key]=value          
# 3.dict(key1=value1,key2=value2....)
# 4.dict([(key1,value1),(key2,value2)....])
# 5.dict(zip([key1,key2......],[value1,value2.......]))

这里我们会提到一个小知识点zip映射

# 5.dict(zip([key1,key2......],[value1,value2.......]))   *********
# zip():映射,两个容器中相同位置的元素一一对应,产生映射关系,形成键值对
# r = list(zip([45,7,8],[23,56,78]))
# print(r)   # [(45, 23), (7, 56), (8, 78)]
# dict51 = dict([(45, 23), (7, 56), (8, 78)])
# print(dict51)

 注意:zip中容器中元素的数量可以不一致,以少的为准。

字典的使用

# 1.{}空字典
dic1 = {}


# 2.非空字典
# a.key和value的数据类型
# 注意1:字典中的key只能是不可变的数据类型,无法使用可变数据类型【list set dict】,和集合中的元素的特征一样
# dict21 = {[6,7,8]:10}   # TypeError: unhashable type: 'list'

# value可以是任意类型
dict22 = {'a':10,'b':35.7,'c':True,'d':[5,7,78],'e':{56,7,8},'f':'ghgh'}
print(dict22)

# b.key和value是否重复
# 注意2:key是唯一的,不可以重复,和集合中的元素的特征一样,如果出现了多个相同的key,后面的value会覆盖之前的value
info_dict ={'name':'张三','age':10,'height':120,'name':'李四'}
print(info_dict)

# value可以重复
score_dict = {'张三':96,'李四':96,'小明':96}
print(score_dict)

# c.字典是无序的
set1 = {345,6,7,9,90,0}
print(set1)  # {0, 6, 7, 345, 9, 90}
'''
字典中的所有的key取出来,其实本质上就是一个集合
Python3.7之前,显示的就是无序
Python3.7之后,看上去显示的是'有序',但是字典是无序的
'''
dict22 = {'a':10,'b':35.7,'c':True,'d':[5,7,78],'e':{56,7,8},'f':'ghgh'}
print(dict22)

# d.字典是可变的
info_dict = {'name':'张三','age':10,'height':120}
# 1>通过键获取值,语法:dic[key]
name = info_dict['name']
print(name)
age = info_dict['age']
print(age)

# 2>通过键修改值,语法:dic[key] = 值
# 注意1:dic[key] = 值,如果key存在,则表示修改指定key对应的value
info_dict['name'] = '李四'
print(info_dict)    # {'name': '李四', 'age': 10, 'height': 120}
# 注意2:dic[key] = 值,当key不存在时, 则表示向字典中添加键值对
info_dict['score'] = 99
print(info_dict)   # {'name': '李四', 'age': 10, 'height': 120, 'score': 99}

'''
列表:有序的,可变的,可以存储重复元素,可以存储不同类型的元素    []
元组:有序的,不可变的,可以存储重复元素,可以存储不同类型的元素   ()
集合:无序的,可变的,不允许存储重复元素,只能存储不可变的数据类型  {34},{}表示字典
字典:无序的,可变的,(key唯一,value可以重复),(key只能是不可变的数据类型,value任意类型)   {}
'''

字典的遍历

字典遍历要注意,由于字典分为键值对,可以遍历出来两个元素,这个就要具体情况具体分析了

当然我都给你们列出来了

info_dict = {'name': '李四', 'age': 10, 'height': 120, 'score': 99}

# 注意:在字典的使用中,只要拿到key,则通过dic[key]就可以获取到value
'''
注意:
 已知key----->获取到的value是唯一的,dic[key]
 已知value---->获取到的key可能有多个,没有专门的语法,需要通过遍历字典进行比对
'''

# 方式一    ******
for key in info_dict:
 print(key,info_dict[key])

# 方式二
# print(info_dict.keys())   # 获取所有的key
for key in info_dict.keys():
 print(key,info_dict[key])

# 方式三:遍历value
print(info_dict.values())  # 获取所有的value
for value in info_dict.values():
 print(value)

# 方式四:遍历key和value   *********
# print(info_dict.items())
for key,value in info_dict.items():
 print(key,value)

字典的系统功能

# 1.增加
info_dict = {'name':'张三','age':10,'height':120}
# a.key不存在,dic[key] = value     ******
info_dict['score'] = 99
print(info_dict)

# b.update():更新/合并              *******
# d1.update(d2):将d2中键值对更新/合并到d1中
subdict = {'a':10,'b':20}
info_dict.update(subdict)
print(info_dict)

# 2.删除
# a.pop():弹出     *********
# dic.pop(key):将指定key对应的键值对从字典中弹出
info_dict.pop('a')
print(info_dict)
# 注意:如果key不存在,执行pop操作则报错KeyError,和在集合中删除一个不存在的元素报的错相同
# info_dict.pop('gender')  # KeyError: 'gender'

# 优化
key = 'gender'
if key in info_dict:
 info_dict.pop('gender')

# b.del dic[key]
del info_dict['b']
print(info_dict)

# c.clear():清空
# info_dict.clear()
# print(info_dict)   # {}

# 3.查
print(len(info_dict))   # 获取键值对的对数
print(info_dict.keys())
print(info_dict.values())
print(info_dict.items())

# get()   ***********
# dic.get(key):通过key获取对应的value,如果key不存在,不会报错
# dic[key]:如果key不存在,则会报错
info_dict = {'name':'张三','age':10,'height':120}
# print(info_dict['gender'])   # KeyError: 'gender'
r = info_dict.get('gender')    # None
print(r)

# 应用
key = 'gender'
if info_dict.get(key):
 info_dict.pop('gender')

关注我要练习题哦,也恳请大佬来进行讨论

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值