大数跨境
0
0

Python中优雅的字典技巧总结

Python中优雅的字典技巧总结 AI算法之道
2022-10-04
0
导读:本文重点介绍了Python中字典操作的相关技巧,并针对性的给出了相关示例和代码实现。学习Python意味着我们可以编写返回正确结果的程序。 掌握Python意味着我们可以以优雅、整洁和Pythonic






01


引言



在日常工作中,大家都需要进行字典的相关操作,对于某些初学者,经常会写一堆繁琐的代码来实现某项简单的功能。本篇文章重点介绍一些在Python中关于字典的一些简单技巧,熟练掌握相关技巧可以极大提升大家的工作效率。

闲话少说,我们直接开始吧!





02


 使用union操作合并字典


当然我们可以使用for循环来组合不同字典中的元素,但是在使用Python3.9之后,我们可以方便的使用union操作来进行字典的合并。
样例代码如下:
cities_us = {'New York City': 'US', 'Los Angeles': 'US'}cities_uk = {'London': 'UK', 'Birmingham': 'UK'}
cities = cities_us|cities_ukprint(cities)# 'New York City': 'US', 'Los Angeles': 'US', # 'London': 'UK', 'Birmingham': 'UK'}

当然我们也可以使用 |= 来实现,如下:

cities_us = {'New York City': 'US', 'Los Angeles': 'US'}cities_uk = {'London': 'UK', 'Birmingham': 'UK'}
cities_us |= cities_ukprint(cities_us)# {'New York City''US''Los Angeles''US',# 'London': 'UK', 'Birmingham': 'UK'}





03


   使用解包操作合并字典


考虑到使用union操作的简洁性,我经常尽可能的使用该操作进行字典的合并操作。但是,如果我们使用的是Python3.9以下的版本,有没有其他简洁的方式来实现上述字典合并功能呢?

当然是存在的,此时推荐使用解包操作来实现。

样例如下:

cities_1 = {'New York City': 'US', 'Los Angeles': 'US'}cities_2 = {'London': 'UK', 'Birmingham': 'UK'}
cities = {**cities_1, **cities_2}print(cities)# {'New York City': 'US', 'Los Angeles': 'US','London''UK''Birmingham''UK'}





04


 使用字典生成式


与Python中的列表生成式一样,字典生成式也是创建字典的一种简便的方法,它为我们提供了筛选数据的灵活性。

字典生成式的一般范式为:

D = {key: value for key,value in iterable (if condition)}

我们可以通过下方例子来体检一下字典生成式的强大,如下:

cities = ['London', 'New York', 'Tokyo', 'Cambridge', 'Oxford']countries = ['UK', 'US', 'Japan', 'UK', 'UK']uk_cities = {city: country for city, country in zip(cities, countries) if country == 'UK'}print(uk_cities)# {'London': 'UK', 'Cambridge': 'UK', 'Oxford': 'UK'}




05


 字典中key-value互换


在某些情形下,我们需要互换字典中的key-value,当然有各种各样的策略来实现上述功能。

以下是我比较推荐的两种实现,如下:

cities = {'London': 'UK', 'Tokyo': 'Japan', 'New York': 'US'}
方案一:
reversed_cities = {v: k for k, v in cities.items()}print(reversed_cities)# {'UK': 'London', 'Japan': 'Tokyo', 'US': 'New York'}
方案二:
reversed_cities = dict(zip(cities.values(), cities.keys()))print(reversed_cities)




06


 列表转为字典


列表也是Python中最常使用的数据结构之一,在某些情形下,我们需要将列表转化为字典。这里我们分情况来讨论:

假如列表中包含key和value,此时可以直接使用dict来生成相应的对象,如下:

cities = [('London', 'UK'), ('New York', 'US'), ('Tokyo', 'Japan')]d_cities = dict(cities)print(d_cities)# {'London': 'UK', 'New York': 'US', 'Tokyo': 'Japan'}
如果列表中只含有key,需要统一赋值某value,此时一般使用dict.fromkeys 方法来实现,如下:
cities = ['London', 'Leeds', 'Birmingham']d_cities = dict.fromkeys(cities,'UK') # set the default value to 'UK' print(d_cities)# {'London''UK''Leeds''UK''Birmingham''UK'}




07

 字典按照value来排序


使用一行代码来实现字典按照value排序,可以借助lambda来实现,样例如下:

cities = {'London': '2', 'Tokyo': '3', 'New York': '1'}print(sorted(cities.items(),key=lambda d:d[1]))# [('New York', '1'), ('London', '2'), ('Tokyo', '3')]




08

 使用Counter


如果我们需要知道在字符串中每个字母使用了多少次,最直观的方法可能是编写一个for循环来遍历所有字母并进行统计。

但如果我们知道Counter,则上述任务将变得异常简单:

from collections import Counter
city = "Yang Zhou"chars = Counter(city)print(chars)# Counter({'Y': 1, 'a': 1, 'n': 1, 'g': 1, ' ': 1, 'Z': 1, 'h': 1, 'o': 1, 'u': 1})
顾名思义,Counter对象帮助我们完成字符统计部分,并将结果保存为字典。如果我们能在类似的使用场景中记住这个特殊的dict,那么可以节省大量的代码编写时间。




09


总结


本文重点介绍了Python中字典操作的相关技巧,并针对性的给出了相关示例和代码实现。
最后,送给大家两句话共勉:

学习Python意味着我们可以编写返回正确结果的程序。掌握Python意味着我们可以以优雅、整洁和Pythonic的方式编写相同的程序。

 

您学废了嘛?





点击上方小卡片关注我



万水千山总关情,点个在看行不行。

【声明】内容源于网络
0
0
AI算法之道
一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
内容 573
粉丝 0
AI算法之道 一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
总阅读23
粉丝0
内容573