Python字典使用技巧详解
作者:赵卓不凡 发布时间:2021-09-07 23:54:25
1. 引言
在日常工作中,大家都需要进行字典的相关操作,对于某些初学者,经常会写一堆繁琐的代码来实现某项简单的功能。本篇文章重点介绍一些在Python中关于字典的一些简单技巧,熟练掌握相关技巧可以极大提升大家的工作效率。
闲话少说,我们直接开始吧!
2. 使用union操作合并字典
当然我们可以使用for循环来组合不同字典中的元素,但是在使用Python3.9之后,我们可以方便的使用union操作来进行字典的合并。
样例代码如下:
cities_us = {'New York City': 'US', 'Los Angeles': 'US'}
cities_uk = {'London': 'UK', 'Birmingham': 'UK'}
cities = cities_us|cities_uk
print(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_uk
print(cities_us)
# {'New York City': 'US', 'Los Angeles': 'US', 'London': 'UK', 'Birmingham': 'UK'}
3. 使用解包操作合并字典
考虑到使用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'}
4. 使用字典生成式
与Python中的列表生成式一样,字典生成式也是创建字典的一种简便的方法,它为我们提供了筛选数据的灵活性。
字典生成式的一般范式为:
D = {<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->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'}
5. 字典中key-value互换
在某些情形下,我们需要互换字典中的key-value,当然有各种各样的策略来实现上述功能。
以下是我比较推荐的两种实现,如下:
cities = {<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->'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)
6. 列表转为字典
列表也是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'}
7. 字典按照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')]
8. 使用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
,那么可以节省大量的代码编写时间。
9. 总结
本文重点介绍了Python中字典操作的相关技巧,并针对性的给出了相关示例和代码实现。最后,送给大家两句话共勉:
学习Python意味着我们可以编写返回正确结果的程序。
掌握Python意味着我们可以以优雅、整洁和Pythonic的方式编写相同的程序。
来源:https://blog.csdn.net/sgzqc/article/details/127160906


猜你喜欢
- 这是个基于three.js的插件,预览地址:戳这里使用方法:1、这个插件的用法很简单,引入如下2个js<script src=&quo
- 有助于效率的类型选择1、使你的数据尽可能小最基本的优化之一是使你的数据(和索引)在磁盘上(并且在内存中)占据的空间尽可能小。这能给出巨大的改
- 如下所示:d = { 'a': '0.0000', 'b':
- 在做项目中遇到这样一个问题,就是我们需要添加几组数据到数据库,但是具体几组数据不确定,有客户来填写,比如我们需要添加打折策略,可能个策略有很
- 读取excel数据需要用到xlrd模块,在命令行运行下面命令进行安装pip install xlrd表格内容大致如下,有若干sheet,每个
- 在正式的生产环境中,我们常常会需要监控服务器的状态,以保证公司整个业务的正常运转,常常我们会用到像nagios、zabbix这类工具进行实时
- 前言现在最流行的本地存储莫过于 cookie 的应用,但浏览器对 cookie 有很多限制,最大的限制在于其对cookie 总大小
- 使用命令行时,如果要添加选项的话,python 2.3里新增加了一个模块叫optparse,也是专门来处理命令行选项的。from optpa
- 我们的项目使用了bootstrapValidator来作为前端校验,但是表单里面有一个UEditor,它用bootstrapValidato
- 如果不是因为总监审查严格,一定要求这个细节解决掉,也许我也不会去深究根源性的解决办法,再此感谢MTIME负责而严格的同事。首先描述一下问题:
- 一、 yaml1、 准备支持的数据类型:字典、列表、字符串、布尔值、整数、浮点数、Null、时间等基本语法规则:大小写敏感使用缩进表示层级关
- 最近做接口对接,遇到了.net开发的webservice接口,因为python第一次与webservice对接,连问带查,最后使用suds库
- 一、名称空间和作用域1、命名空间(Namespace)命名空间是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的。命
- 要写出一个五子棋游戏,我们最先要解决的,就是如何下子,如何判断已经五子连珠,而不是如何绘制画面,因此我们先确定棋盘五子棋采用15*15的棋盘
- 一、xajax与其它ajax框架的比较 xajax功能很简单,但很灵活!~它不象其它一些大的框架,功能确实强大,但执行速度不敢恭维。。功能虽
- 在布尔索引中,我们将根据 DataFrame 中数据的实际值而不是它们的行/列标签或整数位置来选择数据子集。在布尔索引中,我们使用布尔向量来
- 这篇文章主要介绍了python 类的继承 实例方法.静态方法.类方法的代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定
- 在已知DICOM和三维模型对应掩膜的情况下,计算三维模型的体积。思路:1、计算每个体素的体积。每个体素为长方体,x,y为PixelSpaci
- 半年前第一次做脚本编码的时候,由于没有什么使用经验,于是在51js上询问了一下encode脚本和normal脚本混用是否有什么问题呢?结果没
- 一、背景在kubernetes的世界中,很多组件仅仅需要一个实例在运行,比如controller-manager或第三方的controlle