3.【Python编程】字典Dict相关知识及基本操作

3.【Python编程】字典Dict相关知识及基本操作

备注: 本教程主要使用Python3.6在jupyter notebook上编程实现。Python环境配置参考《【Python学习】Windows10开始你的Anaconda安装与Python环境管理》或者《【Python学习】纯终端命令开始你的Anaconda安装与Python环境管理》

3.1 字典的创建

字典是一种可变容器模型,且可存储任意类型对象。

字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示

d = {key1 : value1, key2 : value2, key3 : value3 }

字典值可以是任何的python对象,既可以是标准的对象,也可以是用户定义的,但键不行。

两个重要的点需要记住:

  • 不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住;
  • 键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行。

注意:dict作为Python的关键字和内置函数,变量名不能命名为dict。

dict1 = {'姓名': '韦小宝', '性别': '男', '年龄': 30, '学校': '华南理工大学'}
print("dict1=",dict1)
dict1= {'姓名': '韦小宝', '性别': '男', '年龄': 30, '学校': '华南理工大学'}
# 使用大括号{}来创建空字典
empty_dict = {}
print("empty_dict=",empty_dict)
empty_dict= {}

3.2 访问字典里的值

print("dict1['姓名']: ", dict1['姓名'])
dict1['姓名']:  韦小宝

3.3 修改字典

print("dict1=",dict1)
dict1['年龄'] = 31   # 更新年龄
dict1['籍贯'] = "广东省广州市" # 添加信息
print("dict1=",dict1)
dict1= {'姓名': '韦小宝', '性别': '男', '年龄': 30, '学校': '华南理工大学'}
dict1= {'姓名': '韦小宝', '性别': '男', '年龄': 31, '学校': '华南理工大学', '籍贯': '广东省广州市'}

3.4 删除字典元素

del dict1['籍贯']
print("dict1=",dict1)
dict1= {'姓名': '韦小宝', '性别': '男', '年龄': 31, '学校': '华南理工大学'}

3.5 字典的常用函数

len(dict):计算字典元素个数,即键的总数

print("len(dict1)=",len(dict1))
len(dict1)= 4

str(dict): 输出字典,可以打印的字符串表示

print("str(dict1)=",str(dict1))
print(dict1)
str(dict1)= {'姓名': '韦小宝', '性别': '男', '年龄': 31, '学校': '华南理工大学'}
{'姓名': '韦小宝', '性别': '男', '年龄': 31, '学校': '华南理工大学'}

dict.fromkeys(seq[, value])
用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。

seq = ('姓名', '性别', '年龄')
dict2 = dict.fromkeys(seq) # 默认所有值为None
print("新的字典为 : %s" %str(dict2))
 
dict3 = dict.fromkeys(seq, 10)
print("新的字典为 : %s" %str(dict3))
新的字典为 : {'姓名': None, '性别': None, '年龄': None}
新的字典为 : {'姓名': 10, '性别': 10, '年龄': 10}

dict.get(key, default=None): 返回指定键的值

  • key – 字典中要查找的键
  • default – 如果指定的键不存在时,返回该默认值
print("年龄为 : %s" %dict1.get('年龄'))
年龄为 : 31

dict.items(): 以列表返回视图对象,是一个可遍历的key/value 对。
dict.keys()、dict.values()与dict.items()类似。

print(dict1.items())
print(dict1.keys())
print(dict1.values())
dict_items([('姓名', '韦小宝'), ('性别', '男'), ('年龄', 31), ('学校', '华南理工大学')])
dict_keys(['姓名', '性别', '年龄', '学校'])
dict_values(['韦小宝', '男', 31, '华南理工大学'])
# 遍历列表
for k,v in dict1.items():
    print(k, ": ", v)
姓名 :  韦小宝
性别 :  男
年龄 :  31
学校 :  华南理工大学
# 将字典的 key 和 value 提取出来,存储到两个列表中
# 法1
key = []
value = []
for k,v in dict1.items():
    key.append(k)
    value.append(v)
print(key)
print(value)

# 法2
key = list(dict1.keys())
value = list(dict1.values())
print(key)
print(value)
['姓名', '性别', '年龄', '学校']
['韦小宝', '男', 31, '华南理工大学']
['姓名', '性别', '年龄', '学校']
['韦小宝', '男', 31, '华南理工大学']

dict.update(dict2): 把字典参数 dict2 的 key/value(键/值) 对更新到字典 dict 里。

print ("更新前的字典dict1=", dict1)
temp_dict = {'年龄':31,'班级':'卓越班'}
dict1.update(temp_dict)
print ("更新后的字典dict1=", dict1)
更新前的字典dict1= {'姓名': '韦小宝', '性别': '男', '年龄': 31, '学校': '华南理工大学'}
更新后的字典dict1= {'姓名': '韦小宝', '性别': '男', '年龄': 31, '学校': '华南理工大学', '班级': '卓越班'}

pop(key[,default]): 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。

print ("pop前的字典dict1=", dict1)
print(dict1.pop('班级'))
print ("pop后的字典dict1=", dict1)
pop前的字典dict1= {'姓名': '韦小宝', '性别': '男', '年龄': 31, '学校': '华南理工大学', '班级': '卓越班'}
卓越班
pop后的字典dict1= {'姓名': '韦小宝', '性别': '男', '年龄': 31, '学校': '华南理工大学'}
# 逐个pop字典的键值对
dict1 = {'姓名': '韦小宝', '性别': '男', '年龄': 30, '学校': '华南理工大学'}
print("dict1=",dict1)
for k in list(dict1.keys()):
    print(dict1.pop(k))
print(dict1)
dict1= {'姓名': '韦小宝', '性别': '男', '年龄': 30, '学校': '华南理工大学'}
韦小宝
男
30
华南理工大学
{}

in 操作符用于判断键是否存在于字典中,如果键在字典 dict 里返回 true,否则返回 false。

# 检测键 '姓名' 是否存在
dict1 = {'姓名': '韦小宝', '性别': '男', '年龄': 30, '学校': '华南理工大学'}
if '姓名' in dict1:
    print("键 \'姓名\' 存在")
else :
    print("键 \'姓名\' 不存在")
键 '姓名' 存在

copy与deepcopy

  • 直接赋值:其实就是对象的引用(别名)。
  • 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
  • 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
from copy import deepcopy
dict1 = {'姓名': '韦小宝', '性别': '男', '年龄': 30, '学校': '华南理工大学','分数':[100,90,80]}
dict2 = dict1           # 浅拷贝: 引用对象
dict3 = dict1.copy()    # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,子对象是引用
dict4 = deepcopy(dict1) # 深拷贝
# 修改 data 数据
dict1['年龄']=40
dict1['分数'].remove(100)
 
# 输出结果
print('dict1=', dict1)
print('dict2=', dict2) # 与dict1一样
print('dict3=', dict3) # 与dict1不完全一样,修改dict1的值的不可变数据类型(字符串、数字、元组),不影响dict3,
                       # 修改dict1的值的可变数据类型(列表、字典、集合),会影响dict3
print('dict4=', dict4) # 不受dict1影响
dict1= {'姓名': '韦小宝', '性别': '男', '年龄': 40, '学校': '华南理工大学', '分数': [90, 80]}
dict2= {'姓名': '韦小宝', '性别': '男', '年龄': 40, '学校': '华南理工大学', '分数': [90, 80]}
dict3= {'姓名': '韦小宝', '性别': '男', '年龄': 30, '学校': '华南理工大学', '分数': [90, 80]}
dict4= {'姓名': '韦小宝', '性别': '男', '年龄': 30, '学校': '华南理工大学', '分数': [100, 90, 80]}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YirongChen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值