python教程从基础到精通,第7课—Dictionary(字典)
liuian 2024-11-28 00:43 37 浏览
Hello,小伙伴们,预祝大家五.一快乐!
前面咱们已学习了七大数据类型的Number(数字)、Boolean(布尔类型)、String(字符串),List(列表),Tuple(元组)。今天咱们来研究进一步学习Dictionary(字典)、Set(集合)。
1、Dictionary(字典)的定义
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示:
dic = {key1 : value1, key2 : value2, key3 : value3 }
键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的,如字符串,数字。字典中的元素(key: value对)默认情况下会根据key的ASCII码自动排序,也就是说key改变了,那么这对值在字典中的位置可能就会跟着发生变化。
一个简单的字典示例:
示例代码:
dic1= {} #创建一个空字典
dic2= dict() #创建一个空字典
dic3= {'k1':1,'k2':2,'k3':3,1:'ab',2:'cd',3:'ef'} #key必须为数字或字符串,值可以为任意对象
dic4= dict(one=1,two=2,three=3)
dic5= dict(zip(('one','two','three'),(1,2,3)))
dic6= dict((('one', 1), ('two', 2), ('three', 3)))
dic7= dict({('one', 1), ('two', 2), ('three', 3)})
print(dic1,dic2) # {} {}
print(dic3) # {'k1': 1, 'k2': 2, 'k3': 3, 1: 'ab', 2: 'cd', 3: 'ef'}
print(dic4) # {'one': 1, 'two': 2, 'three': 3}
print(dic5) # {'one': 1, 'two': 2, 'three': 3}
print(dic6) # {'one': 1, 'two': 2, 'three': 3}
print(dic7) # {'one': 1, 'two': 2, 'three': 3}
由于字典的元素是一对key与value,所以没办法像列表与元组一样直接用list(ojb)、turple(ojb)强制,而是要借助dict.fromkeys(ojb)方法,代码如下:
dic1 = ('key1', 'key2', 'key3') # ['key1', 'key2', 'key3']亦可
print(dict.fromkeys(dic1)) # {'key1': None, 'key2': None, 'key3': None}
dic2 = dict.fromkeys(dic1, 'new') # 将元组或列表转成字典的键,其值全为'new'
print(dic2) # {'key1': 'new', 'key2': 'new', 'key3': 'new'}
2、Dictionary(字典)的访问
字典可以通过key访问到相应的值,还存在items类、get、setdefault等方法访问方式,可以提取所有的键,亦可提取所有的值。
直接上代码:
dica = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
print(dica)
print(type(dica.items())) #<class 'dict_items'>
print(tuple(dica.items())) #(('Name', 'Runoob'), ('Age', 7), ('Class', 'First'))
print("dict['Name']:",dica['Name']) #通过key访问值
print("dict['Age']:",dica['Age']) #通过key访问值
for i in dica.keys(): print(i,end=',') #Name,Age,Class,
print()
for i in dica.values(): print(i,end=',') #Runoob,7,First,
print()
for i in dica: print(f'{i}:',dica[i]) #迭代方法,打印整个字典
for i,j in dica.items(): print(f'{i}:',j) #迭代方法,打印整个字典
print(dica.get('age','没有')) #返回key为age的值,没有找到就返回'没有'
print(dica.setdefault('age','没有')) #返回key为age的值,没有找到就返回'没有',但会新建age键,值为’没有‘
print(dica) # {'Name': 'Runoob', 'Age': 7, 'Class': 'First', 'age': '没有'}
3、Dictionary(字典)的操作
1) 改变元素的value
示例代码:
dica = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
dica['Age'] = 8
print(dica) # {'Name': 'Runoob', 'Age': 8, 'Class': 'First'}
2) 改变元素的key,巧用pop(key)方法
示例代码:
dica = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
dica['NianL'] = dica.pop('Age') #key的替换,用'NianL'代替'Age'
print(dica) # {'Name': 'Runoob', 'Class': 'First', 'NianL': 7}
if 'Age' in dica:
print("这个元素存在")
else:
print("这个元素不存在")
3) 更新字典update()方法
示例代码:
dic1={'name':'Jake','year':1998}
dic2={'rank':6, 'year':2018}
dic1.update(dic2) #合并两个字典,key相同的值更新不进去
print(dic1) #{'name': 'Jake', 'year': 2018, 'rank': 6}
4) 删除字典元素pop()、popitem()、del()
示例代码:
dica = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
del dica['Class'] # 删除key为'Class'的元素
print(dica) # {'Name': 'Runoob', 'Age': 7}
del dica['Age'] # 删除key为'Age'的元素
print(dica) # {'Name': 'Runoob'}
dica = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
print(dica.popitem()) #随机删除某键值对,并以元组的形式返回这个键值对,('Class', 'First')
print(dica) #{'Name': 'Runoob', 'Class': 'First'}
del dica # 删除整个字典,后面不可再访问
5) 字典增加元素append()方法
示例代码:
dicta= dict.fromkeys(['k1','k2'],[1]) #将元组或列表转成字典的键,其值全为第二部分
print(dicta) #{'k1': [1], 'k2': [1]}
dicta['k2'].append(666) #因为append是列表的方法,不适用于元组与字典,将字典中的所有值都拓展一个[666]print(dicta) #{'k1': [1, 666], 'k2': [1, 666]}
dicta['k1'] = 777 #修改'k1'的值为777
print(dicta) #{'k1': 777, 'k2': [1, 666]}
6) 字典的浅拷贝与深拷贝
浅拷贝(dict.copy()):拷贝父对象,不会拷贝对象的内部的子对象。
深拷贝(copy.deepcopy()): 它是copy模块的deepcopy方法,完全拷贝了父对象及其子对象。
dic1 = {'name': 'geek', 'car': [1, 2, 3]}
dic2 = dic1.copy()
print(dic1) #{'name': 'geek', 'car': [1, 2, 3]}
print(dic2) #{'name': 'geek', 'car': [1, 2, 3]}
dic1['car'].append(4)
print(dic1) #{'name': 'geek', 'car': [1, 2, 3, 4]}
print(dic2) #{'name': 'geek', 'car': [1, 2, 3, 4]}
我们再看看深拷贝,需要导入copy模块:
import copy
dic1={'name':'geek', 'car':[1,2,3]}
dic3=copy.deepcopy(dic1)
print(dic1) #{'name': 'geek', 'car': [1, 2, 3]}
print(dic3) #{'name': 'geek', 'car': [1, 2, 3]}
dic1['car'].append(4)
print(dic1) #{'name': 'geek', 'car': [1, 2, 3, 4]}
print(dic3) #{'name': 'geek', 'car': [1, 2, 3]}
4、字典的内置函数
Python字典包含了以下内置函数:
5、字典的内置方法
Python字典包含了以下内置方法:
愉快学习的时光总是过得很快,一不小心又到结尾啦。
先来给自己一个奖励,双手举起,yeah!
有什么问题可以关注我/私信我/加好友,让我们一起成长吧。
- 上一篇:python字典dict入门
- 下一篇:在python中如何使用字典
相关推荐
- python入门到脱坑函数—定义函数_如何定义函数python
-
Python函数定义:从入门到精通一、函数的基本概念函数是组织好的、可重复使用的代码块,用于执行特定任务。在Python中,函数可以提高代码的模块性和重复利用率。二、定义函数的基本语法def函数名(...
- javascript函数的call、apply和bind的原理及作用详解
-
javascript函数的call、apply和bind本质是用来实现继承的,专业点说法就是改变函数体内部this的指向,当一个对象没有某个功能时,就可以用这3个来从有相关功能的对象里借用过来...
- JS中 call()、apply()、bind() 的用法
-
其实是一个很简单的东西,认真看十分钟就从一脸懵B到完全理解!先看明白下面:例1obj.objAge;//17obj.myFun()//小张年龄undefined例2shows(...
- Pandas每日函数学习之apply函数_apply函数python
-
apply函数是Pandas中的一个非常强大的工具,它允许你对DataFrame或Series中的数据应用一个函数,可以是自定义的函数,也可以是内置的函数。apply可以作用于DataF...
- Win10搜索不习惯 换个设定就好了_window10搜索用不了怎么办
-
Windows10的搜索功能是真的方便,这点用惯了Windows10的小伙伴应该都知道,不过它有个小问题,就是Windows10虽然会自动联网搜索,但默认使用微软自家的Bing搜索引擎和Edge...
- 面试秘籍:call、bind、apply的区别,面试官为什么总爱问这三位?
-
引言你有没有发现,每次JavaScript面试,面试官总爱问你call、bind和apply的区别?好像这三个方法成了通关密码,掌握了它们,就能顺利过关。其实不难理解,面试官问这些问题,不...
- 记住这8招,帮你掌握“追拍“摄影技法—摄影早自习第422日
-
杨海英同学提问:请问叶梓老师,我练习追拍时,总也不能把运动的人物拍清晰,速度一般掌握在1/40-1/60,请问您如何把追拍拍的清晰?这跟不同的运动形式有关系吗?请您给讲讲要点,谢谢您!摄影:Damia...
- [Sony] 有点残酷的测试A7RII PK FS7
-
都是好机!手中利器!主要是最近天天研究fs5,想知道fs5与a7rii后期匹配问题,苦等朋友的fs5月底到货,于是先拿手里现有的fs7小测一下,十九八九也能看到fs5的影子,另外也了解一下fs5k标配...
- AndroidStudio_Android使用OkHttp发起Http请求
-
这个okHttp的使用,其实网络上有很多的案例的,但是,如果以前没用过,copy别人的直接用的话,可以发现要么导包导不进来,要么,人家给的代码也不完整,这里自己整理一下.1.引入OkHttp的jar...
- ESL-通过事件控制FreeSWITCH_es事务控制
-
通过事件提供的最底层控制机制,允许我们有效地利用工具箱,适时选择使用其中的单个工具。FreeSWITCH是一个核心交换与混合矩阵,它周围有几十个模块提供各种功能特性。我们完全控制了所有的即时信息,这些...
- 【调试】perf和火焰图_perf生成火焰图
-
简介perf是linux上的性能分析工具,perf可以对event进行统计得到event的发生次数,或者对event进行采样,得到每次event发生时的相关数据(cpu、进程id、运行栈等),利用这些...
- 文本检索控件也玩安卓?dtSearch Engine发布Android测试版
-
dtSearchEngineforLinux(原生64-bit/32-bitC++和JavaAPIs)和dtSearchEngineforWin&.NET(原生64-bi...
- 网站后台莫名增加N个管理员,记一次SQL注入攻击
-
网站没流量,但却经常被SQL注入光顾。最近,网站真的很奇怪,网站后台不光莫名多了很多“管理员”,所有的Wordpres插件还会被自动暂停,导致一些插件支持的页面,如WooCommerce无法正常访问、...
- 多元回归树分析Multivariate Regression Trees,MRT
-
多元回归树(MultivariateRegressionTrees,MRT)是单元回归树的拓展,是一种对一系列连续型变量递归划分成多个类群的聚类方法,是在决策树(decision-trees)基础...
- JMETER性能测试_JMETER性能测试指标
-
jmeter为性能测试提供了一下特色:jmeter可以对测试静态资源(例如js、html等)以及动态资源(例如php、jsp、ajax等等)进行性能测试jmeter可以挖掘出系统最大能处...
- 一周热门
-
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
Python实现人事自动打卡,再也不会被批评
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
飞牛OS入门安装遇到问题,如何解决?
-
系统C盘清理:微信PC端文件清理,扩大C盘可用空间步骤
-
10款高性能NAS丨双十一必看,轻松搞定虚拟机、Docker、软路由
-
- 最近发表
-
- python入门到脱坑函数—定义函数_如何定义函数python
- javascript函数的call、apply和bind的原理及作用详解
- JS中 call()、apply()、bind() 的用法
- Pandas每日函数学习之apply函数_apply函数python
- Win10搜索不习惯 换个设定就好了_window10搜索用不了怎么办
- 面试秘籍:call、bind、apply的区别,面试官为什么总爱问这三位?
- 记住这8招,帮你掌握“追拍“摄影技法—摄影早自习第422日
- [Sony] 有点残酷的测试A7RII PK FS7
- AndroidStudio_Android使用OkHttp发起Http请求
- ESL-通过事件控制FreeSWITCH_es事务控制
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)