目录

  • 3.【Python编程】字典Dict相关知识及基本操作
    • 3.1 字典的创建
    • 3.2 访问字典里的值
    • 3.3 修改字典
    • 3.4 删除字典元素
    • 3.5 字典的常用函数

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]}

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

  1. python变量作用域图解_图解python全局变量与局部变量相关知识

    这篇文章主要介绍了图解python全局变量与局部变量相关知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 了解全局变量和局部变量之前,我们先来了解 ...

  2. Python 将字典(dict)转换为DataFrame

    Python 将字典(dict)转换为DataFrame 1.将字典转换为 Pandas DataFame 的方法 Pandas 的 DataFrame 构造函数pd.DataFrame()如果将字典 ...

  3. Python遍历字典dict的几种方法(包含两个字典的遍历)

    Python遍历字典dict的几种方法 单个字典的遍历 根据key遍历 示例: dict_map = {1:'hello', 2:'world'} for key in dict_map:print( ...

  4. Python编程 字典创建

    作者简介:一名在校计算机学生.每天分享Python的学习经验.和学习笔记.   座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.字典 1.字典介绍 (了解) 2.字典创 ...

  5. python编程字典100例_python中字典(Dictionary)用法实例详解

    本文实例讲述了python中字典(Dictionary)用法.分享给大家供大家参考.具体分析如下: 字典(Dictionary)是一种映射结构的数据类型,由无序的"键-值对"组成. ...

  6. 【Python】字典dict类型转换为列表list类型

    我们有时候用chrome浏览器获取Network中XHR的数据,得到的是Json类型,有时也可能是python中的字典类型,如果获取的数据比较复杂,通过简单的处理我们是无法拿到我们需要的数据的,这时我 ...

  7. python十:字典(dict)

    字典类似于java中的map,元素都是键值对 # 列表,字典不能当做字典的key值 dt = {1:46453,True:123,"dsf":545,#[12,45]:77#{&q ...

  8. Python中字典(dict)详解

    python字典:   一个映射对象将可散列的值映射到任意对象.映射类型是可变的对象.当前只有一种标准的映射类型,即字典.用作键值的数字类型遵循正常的数值比较规则:如果两个数是相等的(例如1和1.0) ...

  9. python编程字典数据库_python基础数据类型之字典、集合

    哈啰!大家好,今天是初五了,牛年接财神的好日子,懂得都懂.祝@所有人2021年,事事顺利,牛气冲天,福利满满,财运亨通,步步高升,学业进步! 那么,这次介绍的是鼎鼎大名的字典,其以其操作的灵活性.操作 ...

最新文章

  1. 边缘计算k8s集群之SuperEdge
  2. Leetcode--397. 整数替换
  3. Python中李群SO(3)与李代数so(3)之间指数映射与实现源码
  4. RocketMQ如何保证消息不丢失(消息可靠性)
  5. 写程序,流程图很重要!
  6. JS进阶Date format(日期格式化)
  7. extundelete实现Linux下文件/文件夹数据恢复!
  8. ITextSharp导出PDF表格和图片(C#)
  9. 他山之石 可以攻玉-《海量数据库解决方案I》
  10. BAT算法工程师的成长之路,超详细的学习路线
  11. Oracle 的 Round函数详解
  12. 论文阅读:Beyond Synthetic Noise: Deep Learning on Controlled Noisy Labels(2017ICML)
  13. 1013. Battle Over Cities (25)
  14. SublimeLinter
  15. 对计算机的认识与感想
  16. 计算机网络——物理层(宽带接入技术)
  17. PGL图学习之图神经网络ERNIESage、UniMP进阶模型[系列八]
  18. 第三周.02.HAN算法详解
  19. itunes 歌曲导出 和上传
  20. Element-ui源码分析

热门文章

  1. 纯CSS 毛玻璃效果
  2. 华为5g鸿蒙系统手机多少钱,华为Mate30Pro或成今年机皇:鸿蒙系统+麒麟985+5G基带,价格感人...
  3. bugku 把猪困在猪圈里
  4. React入门学习(一)
  5. python 手动读取cifar10_如何用python解析cifar10数据集图片
  6. 智能定位系统实验报告
  7. mysql 字符串截取查询
  8. 人脸识别门禁的那些“坑”,你中招了吗?
  9. 汽车不同的电源接通状态
  10. USACO-Controlling Companies