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个使用技巧着实太妙相关推荐

  1. Python 字典(Dictionary) get()方法

    Python 字典(Dictionary) get()方法 描述 Python 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值. 语法 get()方法语法: ...

  2. python 字典 的pop 方法

    python 字典pop 方法的作用: 字典 pop() 方法删除字典给定键 key 及对应的值,返回值为被删除的值 字典pop 的语法: pop(key[,default]) demo 练习字典po ...

  3. python字典一键多值_python字典中如何一键多值的写入?

    python字典中如何一键多值的写入? python字典中一键多值写入的方法: 1.循环写入字典key.value.删除指定的键值对: 原文本'jp_url.txt'每行元素以逗号分隔:host_ke ...

  4. python字典{:4}_Python字典101:详细的视觉介绍

    python字典{:>4} 欢迎 (Welcome) In this article, you will learn how to work with Python dictionaries, ...

  5. Python 字典(Dictionary)

    Python 字典(Dictionary) 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在 ...

  6. python字典操作添加_Python字典常见操作实例小结【定义、添加、删除、遍历】

    本文实例总结了python字典常见操作.分享给大家供大家参考,具体如下: 简单的字典: 字典就是键值对key-value组合. #字典 键值对组合 alien_0 ={'color':'green', ...

  7. python 字典代码_Python 字典(Dictionary)

    Python 字典(Dictionary) 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包 ...

  8. python字典(dict)+常用方法操作+列表、元组、集合、字典的互相转换

    python字典(dict)+常用方法操作+列表.元组.集合.字典的互相转换 字典也是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据. 为了保存具有映射关系的数据,Python ...

  9. python字典之defaultdict详解

    python字典之defaultdict详解 defaultdict为你的字典设定一个默认值或者默认值的数据类型: defaultdict接受一个工厂函数作为参数,如下来构造: dict =defau ...

最新文章

  1. Cygwin的安装及在Android jni中的简单使用举例
  2. pytorch中的torch.nn.LSTM解析
  3. 原生js实现Ajax,JSONP
  4. linux下使用find xargs grep查找文件及文件内容
  5. Vue项目实战03 : vue中 meta 路由元信息
  6. 盘点2020 最烂密码大曝光,第一名的竟然是它?
  7. java封装对象数组_java解析JSON对象和封装对象的示例
  8. matplotlib 数据可视化
  9. linux 修改bios信息,一种基于Linux系统通过IPMI工具修改BIOS选项的测试方法及系统_2017103901253_权利要求书_专利查询_专利网_钻瓜专利网...
  10. 使用java9的uuid生成方式,让uuid生成速度提升一个档次
  11. JLU数据结构第二次上机实验解题报告
  12. 删除注册表里没用的服务
  13. 什么!爬虫要违法了?别慌:守住规则,大胆去爬
  14. layout_marginTop=-3dp导致内容被遮挡的问题处理
  15. C++二分查找相关函数用法总结
  16. html网页宽度自动适应手机屏幕
  17. 活动报名 | 加州大学圣地亚哥分校商静波:如何通过极弱监督来完成海量文本的结构化?...
  18. Component(组件)的创建
  19. Java学习:创建简单的名片管理系统
  20. A段架构师_隽语集(IT+設計思考_2001)

热门文章

  1. 全球10大顶级开源ERP系统
  2. WB蛋白质印迹法(Western blot)
  3. 程序员如何维护自己?
  4. python-程序的控制结构
  5. AI之机器翻译及相关技术
  6. Loadrunner 值Controler 部分功能用法
  7. FZU 2243 - Daxia like uber (最短路)
  8. Javascript省份城市(html代码)
  9. 国家统计局,(省/市/县/区/街道)五级联动数据
  10. 张国荣全集 【1978-2003 】转