高估自己了?Python 字典这6个使用技巧着实太妙
Python 的优点之一是字典可以与 JSON 对象无缝集成,这使得字典数据结构的使用比其他编程语言更频繁。
在这篇文章中,我将介绍 6 个关于 Python 字典的技巧,相信如果你以前不知道这些技巧,你会从中受益。
推荐文章
有人把吴恩达老师的机器学习和深度学习做成了中文版
上瘾了,最近又给公司撸了一个可视化大屏(附源码)
如此优雅,4款 Python 自动数据分析神器真香啊
梳理半月有余,精心准备了17张知识思维导图,这次要讲清统计学
年终汇总:20份可视化大屏模板,直接套用真香(文末附源码)
1、按值对字典数组进行排序
我们从一些 Web API 接收 JSON 对象数组是很常见的。假设我们已经在 Python 列表中读取了它们。现在我们要按照里面的某个值对这些字典进行排序。
通常,当我们想要对列表进行排序时,sorted() 函数将非常容易使用。 但是,这一次我们要根据它包含的字典对象的值对列表进行排序。事实上, sorted() 函数有一个参数叫做 key。
让我们首先创建一个字典列表。假设我们想按人们的年龄对字典进行排序。
students = [{'name': 'Alice', 'age': 40},{'name': 'Bob', 'age': 37},{'name': 'Chris', 'age': 33}
]
然后,我们可以这样创建一个函数:
def get_age(dict_item):return dict_item['age']
现在,我们可以在 sorted() 函数中使用 get_age 函数
sorted(students, key=get_age)
我们可以看到 get_age() 函数非常简单,我们可以将它简称为 lambda 函数。
sorted(students, key=lambda item: item['age'], reverse=True)
在上面的例子中,我们使用 lambda 编写了一个内联函数。
我们展开按 key 排序的用法
虽然这不适用于字典,但我只想展示 sorted()函数的扩展用法。
假设我们有一个字符串列表如下
strings = ['aaa3','bbb2','ccc1','ddd5'
]
如果我们使用 sorted() 函数对其进行排序,则必须基于每个字符串的首字母。因此,不应更改顺序。
但是,如果我们想根据最后一位数字对列表进行排序怎么办?我们可以编写一个 lambda 函数来获取字符串的最后一个字符。
2、按键或值对字典进行排序
my_dict = {'c': 1, 'b': 2, 'a': 3}
在 Python 3.6 之前,不要为此烦恼,因为字典是无序实现的。换句话说,我们只能对字典进行排序并按顺序打印。这可以在 for 循环中轻松完成。如果项目的顺序很重要,我们需要使用 Ordered Dictionary。
from collections import OrderedDict
my_ordered_dict = OrderedDict(sorted(my_dict.items()))
但是从 Python 3.6 开始,字典将具有顺序,这意味着对字典进行排序开始变得有意义。如果我们想按字典的键对字典进行排序,我们可以简单地使用 sorted() 函数对项目进行排序,然后将它们转换回字典。
按字典值排序
如果我们想按值对字典进行排序,我们将需要再次使用从前面的问题中得到的技巧。 那就是使用 sorted() 函数的关键参数。
dict(sorted(my_dict.items(), key=lambda item: item[1]))
由于字典的 items() 将返回元组,我们可以使用订阅 [1] 访问它的第二个元素,这将是值。
3、使用推导创建字典
当我们想用 for 循环创建一个逻辑简单的字典时,使用字典推导可以非常简洁高效。
例如,我们想使用 sqaure_x 作为键,其中 x 是一个数字,那么这个值应该是对应值的平方。 我们可以使用带有 range() 函数的 for 循环来获取数字序列,然后按如下方式创建字典。
4、将两个列表拼接成字典
有时,我们可能会分别获取键和值。两个能够将接收到的列表反序列化为字典以供以后使用,我们必须将它们拼接在一起。
通常我们可以使用 for 循环,本文分享一个更好的方法,它非常 Pythonic。
keys = ['name', 'age', 'skill']
values = ['Chris', 33, 'Python']
my_dict = dict(zip(keys, values))
使用 zip() 函数还有更多好处。 例如,如果我们有两个长度不同的列表,多余的项目将被忽略。
keys = ['name', 'age', 'skill']
values = ['Chris', 33, 'Python', 'English']
my_dict = dict(zip(keys, values))
在上面的示例中,第二个列表中的字符串"English"被忽略了,因为它没有对应的键。
如果我们知道列表长度应该严格相同,我们也可以强制执行。所以,如果两个列表的长度不同,就会抛出错误。请注意,此严格标志是在 Python 3.10 中添加的。
5、合并两个字典
合并两个或多个字典可能是非常频繁的操作,它最棘手的是在不同的 Python 版本中使用不同的方法。
在 Python 3.4 或更低版本中
我们可以使用字典的 update() 函数。它会将另一个字典附加到当前字典。
但是,缺点是第一个字典 my_dict1 被修改了。如果我们想保留两个原始字典,我们必须创建第三个。
从 Python 3.5 开始,它将用于解压列表的星号 *list 语法扩展为使用双星号 **dictioanry 解压字典。
因此,我们可以创建一个新字典,并将其中的两个原始字典解包。
从 Python 3.9 开始
在 Python 3.9 中,涉及到一种新语法,即使用管道 | 合并两个字典。
6、更改密钥的名称
如果我们想更改密钥的名称怎么办?假设我们从一个 API 接收到 JSON 对象,但是键名与我们在数据库中的不一致。因此,在将对象保存到数据库之前,我们需要更改键的名称。
请不要写一个for循环来查找有key的item,除非有很多key需要按照一定的规则改变。相反,一种简单的方法是使用简单地将值传递给新项目,然后删除旧项目。
执行上述示例后,键"skill"已更改为"programming_language"。这是实现这一点的最直观的方法。但是,我们甚至可以通过使用字典的 pop() 函数来简化它。
这个想法是在字典中创建一个新键并从弹出的旧键值对中获取值。 之后,用旧值创建新键,旧键值对已经消失。
总结
字典是 Python 中最重要的数据结构之一。因此,知道一些技巧来做一些频繁的操作是非常重要的,这些技巧不仅可以节省我们重新发明轮子的时间,还可以提供更高的性能。
总结
人生不可重来,但是Python可以重试!
我已经将retrying
这个装饰函数的使用方法毫无保留地奉献给各位看官了,赶快用起来吧!
技术交流
欢迎转载、收藏、有所收获点赞支持一下!
目前开通了技术交流群,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友
- 方式①、发送如下图片至微信,长按识别,后台回复:加群;
- 方式②、添加微信号:dkl88191,备注:来自CSDN
- 方式③、微信搜索公众号:Python学习与数据挖掘,后台回复:加群
高估自己了?Python 字典这6个使用技巧着实太妙相关推荐
- Python 字典(Dictionary) get()方法
Python 字典(Dictionary) get()方法 描述 Python 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值. 语法 get()方法语法: ...
- python 字典 的pop 方法
python 字典pop 方法的作用: 字典 pop() 方法删除字典给定键 key 及对应的值,返回值为被删除的值 字典pop 的语法: pop(key[,default]) demo 练习字典po ...
- python字典一键多值_python字典中如何一键多值的写入?
python字典中如何一键多值的写入? python字典中一键多值写入的方法: 1.循环写入字典key.value.删除指定的键值对: 原文本'jp_url.txt'每行元素以逗号分隔:host_ke ...
- python字典{:4}_Python字典101:详细的视觉介绍
python字典{:>4} 欢迎 (Welcome) In this article, you will learn how to work with Python dictionaries, ...
- Python 字典(Dictionary)
Python 字典(Dictionary) 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在 ...
- python字典操作添加_Python字典常见操作实例小结【定义、添加、删除、遍历】
本文实例总结了python字典常见操作.分享给大家供大家参考,具体如下: 简单的字典: 字典就是键值对key-value组合. #字典 键值对组合 alien_0 ={'color':'green', ...
- python 字典代码_Python 字典(Dictionary)
Python 字典(Dictionary) 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包 ...
- python字典(dict)+常用方法操作+列表、元组、集合、字典的互相转换
python字典(dict)+常用方法操作+列表.元组.集合.字典的互相转换 字典也是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据. 为了保存具有映射关系的数据,Python ...
- python字典之defaultdict详解
python字典之defaultdict详解 defaultdict为你的字典设定一个默认值或者默认值的数据类型: defaultdict接受一个工厂函数作为参数,如下来构造: dict =defau ...
最新文章
- Cygwin的安装及在Android jni中的简单使用举例
- pytorch中的torch.nn.LSTM解析
- 原生js实现Ajax,JSONP
- linux下使用find xargs grep查找文件及文件内容
- Vue项目实战03 : vue中 meta 路由元信息
- 盘点2020 最烂密码大曝光,第一名的竟然是它?
- java封装对象数组_java解析JSON对象和封装对象的示例
- matplotlib 数据可视化
- linux 修改bios信息,一种基于Linux系统通过IPMI工具修改BIOS选项的测试方法及系统_2017103901253_权利要求书_专利查询_专利网_钻瓜专利网...
- 使用java9的uuid生成方式,让uuid生成速度提升一个档次
- JLU数据结构第二次上机实验解题报告
- 删除注册表里没用的服务
- 什么!爬虫要违法了?别慌:守住规则,大胆去爬
- layout_marginTop=-3dp导致内容被遮挡的问题处理
- C++二分查找相关函数用法总结
- html网页宽度自动适应手机屏幕
- 活动报名 | 加州大学圣地亚哥分校商静波:如何通过极弱监督来完成海量文本的结构化?...
- Component(组件)的创建
- Java学习:创建简单的名片管理系统
- A段架构师_隽语集(IT+設計思考_2001)