Python入门系列21-Python内置数据结构之字典操作
liuian 2024-11-28 00:43 36 浏览
在Python编程中使用字典必然需要对它进行各种操作,比如取值、删除某个键值对、增加某个键值对、循环、判断键存在等等,而这些操作都可以通过字典自带的方法来轻松的完成。
我们先来查看字典自带有哪些方法。
>>> dir({})
['__class__',
'__contains__',
'__delattr__',
'__delitem__',
'__dir__',
'__doc__',
'__eq__',
'__format__',
'__ge__',
'__getattribute__',
'__getitem__',
'__gt__',
'__hash__',
'__init__',
'__init_subclass__',
'__iter__',
'__le__',
'__len__',
'__lt__',
'__ne__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__setitem__',
'__sizeof__',
'__str__',
'__subclasshook__',
'clear',
'copy',
'fromkeys',
'get',
'items',
'keys',
'pop',
'popitem',
'setdefault',
'update',
'values']
没错,上面我使用两个大括号来声明一个字典,并没有预先去声明一个有键值对的字典。
我们同样忽略以双下划线开头的方法和属性,实际上我们以后几乎都是跟这些方法打交道的。
1、values、keys和items方法
这三个方法很像,values方法会返回字典的所有值,而keys方法会返回字典的所有键,items方法则返回由键和值组成的元组为元素的数据结构,这对我们需要收集字典的值、键或者键值对的时候是很有帮助的。
>>> help({}.values) # 查看字典values方法的帮助文档
Help on built-in function values:
values(...) method of builtins.dict instance
D.values() -> an object providing a view on D's values
>>>
>>> help({}.keys) # 查看字典keys方法的帮助文档
Help on built-in function keys:
keys(...) method of builtins.dict instance
D.keys() -> a set-like object providing a view on D's keys
>>>
>>> help({}.items)
Help on built-in function items:
items(...) method of builtins.dict instance
D.items() -> a set-like object providing a view on D's items
>>>
>>> url = {
'baidu': 'http://www.baidu.com',
'google': 'http://www.google.com',
'douban': 'http://www.douban.com',
'python': 'http://www.python.org',
}
>>> url
{
'baidu': 'http://www.baidu.com',
'google': 'http://www.google.com',
'douban': 'http://www.douban.com',
'python': 'http://www.python.org',
}
>>> url.values() #在Python3中,values方法返回一个dict_values,在Python2中会返回一个包含字典值的列表
dict_values(['http://www.baidu.com', 'http://www.google.com', 'http://www.douban.com', 'http://www.python.org'])
>>> list(url.values()) #我们可以利用内置函数list把dict_values转换成列表
['http://www.baidu.com', 'http://www.google.com', 'http://www.douban.com', 'http://www.python.org']
>>>
>>> url.keys()
dict_keys(['baidu', 'google', 'douban', 'python'])
>>> list(url.keys())
['baidu', 'google', 'douban', 'python']
>>>
>>> url.items()
dict_items([('baidu', 'http://www.baidu.com'), ('google', 'http://www.google.com'), ('douban', 'http://www.douban.com'), ('python', 'http://www.python.org')])
>>> list(url.items())
[('baidu', 'http://www.baidu.com'),
('google', 'http://www.google.com'),
('douban', 'http://www.douban.com'),
('python', 'http://www.python.org')]
2、pop和popitem方法
这两个方法有点似曾相识,没错,在列表操作那一章中也讲到这个方法,方法的作用都差不多,都是把数据结构中的元素给剔除掉,但这两个方法的用法有差别。
>>> help({}.pop)
Help on built-in function pop:
pop(...) method of builtins.dict instance
D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
If key is not found, d is returned if given, otherwise KeyError is raised
>>>
>>> help({}.popitem)
Help on built-in function popitem:
popitem(...) method of builtins.dict instance
D.popitem() -> (k, v), remove and return some (key, value) pair as a
2-tuple; but raise KeyError if D is empty.
从上面这两个方法的帮助文档可以知道:
pop方法可以接收两个参数,一个必须提供,一个是可选的。必须提供的是字典的键,如果字典存在该键,则会剔除对应的值并返回。如果提供的键在字典中不存在,则会报错,除非同时提供一个可选的参数,则会返回该可选参数。
popitem方法则不接收任何参数,它会随机返回一个由键和值组成的元组,如果空字典使用该方法则会产生一个KeyError错误。
>>> url = {
'baidu': 'http://www.baidu.com',
'google': 'http://www.google.com',
'douban': 'http://www.douban.com',
'python': 'http://www.python.org',
}
>>> url
{
'baidu': 'http://www.baidu.com',
'google': 'http://www.google.com',
'douban': 'http://www.douban.com',
'python': 'http://www.python.org',
}
>>> url.pop('baidu') # 剔除键'baidu'对应的值
'http://www.baidu.com'
>>> url
{
'google': 'http://www.google.com',
'douban': 'http://www.douban.com',
'python': 'http://www.python.org',
}
>>> url.pop('sina') # 剔除一个不存在的键,并且不提供可选参数
Traceback (most recent call last):
File "D:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2963, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-136-2406404084fd>", line 1, in <module>
url.pop('sina')
KeyError: 'sina'
>>> url.pop('sina', 'None') # 剔除一个不存在的键,并且提供可选参数
'None'
>>>
>>> url.popitem()
('google', 'http://www.google.com')
>>> {}.popitem() #空字典执行popitem方法,会产生错误
Traceback (most recent call last):
File "D:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2963, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-138-660ae4b74927>", line 1, in <module>
{}.popitem()
KeyError: 'popitem(): dictionary is empty'
3、get方法
字典get方法用于获取对应键的值,它中括号法一样,可以获取字典的值,但是它两对待键不存在的情况时表现又不一样。
利用中括号法获取字典某个值的时候,如果字典中不存在该键,则会删除错误。而利用get方法不会报错,这也是推荐大家使用get方法获取值的原因。
get方法可以接收两个参数,一个是必须提供,一个是可选的。键是必须提供的参数,如果字典存在该键,则返回对应的值。如果字典不存在该键,则会返回一个None数据类型,除非提供可选参数来让找不到键的情况下返回可选参数。
>>> help({}.get)
Help on built-in function get:
get(...) method of builtins.dict instance
D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.
>>>
>>> url = {
'baidu': 'http://www.baidu.com',
'google': 'http://www.google.com',
'douban': 'http://www.douban.com',
'python': 'http://www.python.org',
}
>>> url
{
'baidu': 'http://www.baidu.com',
'google': 'http://www.google.com',
'douban': 'http://www.douban.com',
'python': 'http://www.python.org',
}
>>> url.get('baidu') # 返回键'baidu'对应的值
'http://www.baidu.com'
>>> print(url.get('zhihu') #试图获取一个不存在的键,不提供可选参数的情况下返回None
None
>>> url.get('zhihu', 'http://www.zhihu.com') # 返回可选参数
'http://www.zhihu.com'
>>>
>>> url['baidu']
'http://www.baidu.com'
>>> url['zhihu'] # 没得商量,会产生一个KeyError错误
Traceback (most recent call last):
File "D:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2963, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-161-7d75b393b9db>", line 1, in <module>
url['zhihu']
KeyError: 'zhihu'
4、update方法
要扩展现有字典经常碰到,也叫作更新字典,该方法可以提供多种类型的参数,比如字典、有特殊要求的列表或者元组。
>>> help({}.update)
Help on built-in function update:
update(...) method of builtins.dict instance
D.update([E, ]**F) -> None. Update D from dict/iterable E and F.
If E is present and has a .keys() method, then does: for k in E: D[k] = E[k]
If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v
In either case, this is followed by: for k in F: D[k] = F[k]
>>>
>>> url = {
'baidu': 'http://www.baidu.com',
'google': 'http://www.google.com',
'douban': 'http://www.douban.com',
'python': 'http://www.python.org',
}
>>> url
{
'baidu': 'http://www.baidu.com',
'google': 'http://www.google.com',
'douban': 'http://www.douban.com',
'python': 'http://www.python.org',
}
>>> new_dict = {'zhihu': 'http://www.zhihu.com'} #定义一个新的字典
>>> url.update(new_dict)
>>> url
{'baidu': 'http://www.baidu.com',
'google': 'http://www.google.com',
'douban': 'http://www.douban.com',
'python': 'http://www.python.org',
'zhihu': 'http://www.zhihu.com'}
>>>
>>> url.update([('name', 'python'),( 'age',28)])
{'baidu': 'http://www.baidu.com',
'google': 'http://www.google.com',
'douban': 'http://www.douban.com',
'python': 'http://www.python.org',
'zhihu': 'http://www.zhihu.com',
'name': 'python',
'age': 28}
5、setdefaut方法
setdefautl方法可以说是get方法的升级版,该方法同样也可以接收两个参数,一个必须提供,就是字典的键。另一个是可选的,在有些时候这个可选参数作用很大。
1、如果两个参数同时提供,当字典中存在该键时,则返回键对应的值。如果字典中不存在该键,则该字典会利用键参数为新键,可选参数为值作为新元素添加的字典中,并且返回可选参数。
2、如果只提供键参数,如果字典中存在该键,则返回对应值。如果不存在,则返回None
>>> help({}.setdefault)
Help on method_descriptor:
setdefault(...)
D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D
>>> d = {}
>>> d.setdefault('name') #空字典不存在该键,返回None
>>> d.setdefault('name', 'Python')
'
6、删除字典键值对及字典
除了可以使用pop和popitem方法来删除字典键值对外,我们可以使用del来删除。
>>> url = {
'baidu': 'http://www.baidu.com',
'google': 'http://www.google.com',
'douban': 'http://www.douban.com',
'python': 'http://www.python.org',
}
>>> url
{
'baidu': 'http://www.baidu.com',
'google': 'http://www.google.com',
'douban': 'http://www.douban.com',
'python': 'http://www.python.org',
}
>>> del url['baidu'] #删除某个键值对
>>> url
{'google': 'http://www.google.com',
'douban': 'http://www.douban.com',
'python': 'http://www.python.org'}
>>> del url #删除整个字典
>>> url # url已不存在,会报错
Traceback (most recent call last):
File "D:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2963, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-196-5446fb31b66c>", line 1, in <module>
url
NameError: name 'url' is not defined
相关推荐
- 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)