Python入门系列21-Python内置数据结构之字典操作
off999 2024-11-02 12:24 28 浏览 0 评论
在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相关推荐
- 微信管理软件(微信管理)
-
微信管理,可以一键将消息发送到多个群,不限制群数量和次数选择好群组发送消息即可。“里德助手”多消息群发,可以设置多条消息发送,包括图文、小程序,公众号,文章等都是可以的。亲密群发,逢年过节,总是要给...
-
- 优酷视频下载安装2025最新版本
-
2022爱奇艺腾讯优酷会员,要根据具体的需求来选择。喜欢青春偶像剧类型的可以选择爱奇艺视频;喜欢一些自制综艺和自制剧的优酷视频会员是不错的选择;腾讯视频定位就是主打大IP剧和一些热门综艺的转播,一般卫视播出的都会出现在腾讯视频有这方面需...
-
2026-01-19 00:03 off999
- 火辣辣的小说网(火辣辣的小说网名)
-
《司夜爵姜笙》。内容简介:今天是她的婚礼,可新郎司夜爵没有出现。姜笙站在台上,耳边充斥着满座亲朋的窃窃私语。想哭吗?想。可她要真哭出来,场面就更难看了。姜笙固执的站在那儿看着教堂大门。可看着天色从亮到...
- 小程序如何转换成word文档(小程序怎么转文档格式)
-
小程序文件一般是以小程序的代码形式存在的,不能直接转换成文档。如果需要将小程序中的文本内容转换为文档,可以尝试手动复制粘贴到文档编辑器中,或者使用相关的工具或软件进行批量转换。但是,需要注意版权问题和...
- 百度云网盘资源链接(百度云网盘资源链接群组小众圈子)
-
如果您想从网盘中提取网址,可以按照以下步骤操作:1.打开您的网盘,找到您想提取网址的文件或文件夹。2.右键单击该文件或文件夹,选择“复制链接”或“获取链接”等选项。3.将复制的链接粘贴到浏览器地...
-
- pr软件下载手机版(pr软件官方下载)
-
pr2019的软件安装较为简单,点击setup.exe应用程序之后,在弹出的界面设置安装选项:1、语言2、安装路径。这里的语言默认选择中文。默认的安装路径在c盘,推荐安装的非系统盘的盘符中,比如D盘。单击文件后进行路径的指定,指定完成后默认...
-
2026-01-18 23:03 off999
- 音乐剪辑软件免费版(音乐剪辑用什么免费软件)
-
CoolEditPro2.0或2.1CoolEditPro是一款既能支持声音录制,也能支持声音编辑与合成的多功能软件,利用这样的软件,你可以将自己满意的歌声或者喜欢的歌曲录制下来。该软件支持从多种声音...
-
- wifi密码查看密码器下载(wifi密码查看密码器下载官方)
-
在手机的应用商店里,然后找到万能钥匙,点击下载。下载完成后直接安装在桌面上就可以了。在你电话应用里面下载万能钥匙,就自动会出现在桌面上了感觉WiFi共享精灵最好用,WiFi共享精灵是一款电脑搭建免费wifi热点必备软件,电脑安装,一键...
-
2026-01-18 22:43 off999
- 畅读小说免费版(畅读小说在线)
-
1.如果你购买京东plus会员,京东阅读里的畅读书籍就可以免费看了。2.也可以下载得到?这个软件,也有比较多的书籍可以免费看。番茄的畅读卡是指在番茄读书app里设置的一种功能,用于提供会员用户更加畅快...
- 云课堂智慧教学平台(云课堂智慧教学平台app下载)
-
打开电脑版云课堂在课程中心里面找到课程然后点开按开课班级里面有个退班点击就可以退出了,然后重新选课吧要更改云课堂智慧职教的身份,您可以按照以下步骤操作:1.打开云课堂智慧职教网站或者手机应...
- 起名(起名字2025免费八字起名周易)
-
八笔:宝,果,欣,明,怡,英,林,苗,青,茉五笔:玉,兰,仙,白,乐,禾,可,冬个人意见:欣兰1.取名排辈分的规则字辈是中国起名基本要素,一般情况是名字的第一个字是姓氏,第二个字是辈分,第三个字是名...
- 视频转换大师(视频格式转换在线)
-
你要去掉屏幕上的字你可以按软件的指导交了费自然就会去掉屏幕上的字串了,因为现在是试用软件只是给你试用的,你买了就好了
- 网络监控系统(网络监控系统原理图)
-
那得看监控方式和网络环境。一、本地监控,即与摄像头有线连接本地使用电脑或录像机监控,是可以不接路由器的。可以通过交换机或录像机进行监控。二、远程监控,这种方式需要,摄像头和监控端都接入互联网。而现在大...
- 免费小说阅读器哪个好(好用又免费的小说阅读器)
-
你好,你要在手机上面看的话,推荐追书神器和小书亭,这两个都有全网搜索和换源功能,所以是免费阅读小说,免费下载小说的如果是要在电脑上面的话,可以用书荒阅读器,天天阅读器,还有鹰爪阅读器,有免费阅读和下载...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
Python 批量卸载关联包 pip-autoremove
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
