高估自己了?Python 字典这6个使用技巧着实太妙

Posted Python学习与数据挖掘

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高估自己了?Python 字典这6个使用技巧着实太妙相关的知识,希望对你有一定的参考价值。

Python 的优点之一是字典可以与 JSON 对象无缝集成,这使得字典数据结构的使用比其他编程语言更频繁。

在这篇文章中,我将介绍 6 个关于 Python 字典的技巧,相信如果你以前不知道这些技巧,你会从中受益。

推荐文章

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动态演示蛮力法解决凸包问题

Node.js被高估了吗

python matplotlib(数据可视化)

在python中,列表,字典的相互转换?

Hat’s Words(字典树的运用)

Python编程入门到实践 - 笔记( 6 章)