Python字典常用操作与进阶玩法

在Python中,字典是一种常用的数据结构,是实现各类算法的基础。

1.创建字典

有多种方法可以创建字典,以下几种方法创建的字典均等于 {"one": 1, "two": 2, "three": 3}


a = dict(one=1, two=2, three=3)
b = {'one': 1, 'two': 2, 'three': 3}
c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
d = dict([('two', 2), ('one', 1), ('three', 3)])
e = dict({'three': 3, 'one': 1, 'two': 2})
f = dict({'one': 1, 'three': 3}, two=2)
a == b == c == d == e == f

除此之外还可以用字典推导式快速生成字典。

{k: v for k, v in lst}

例如

numbers = [1, 2, 3, 4, 5]
squares = {x: x**2 for x in numbers}
print(squares)  # 输出: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

字典键的特性

字典可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行,有特殊的要求,两个重要的点需要记住:

1)唯一性:不允许同一个键出现两次,创建时如果同一个键被赋值两次,后一个值会被记住。

2)不可变:键必须不可变,所以可以用数字,字符串或元组充当,所以用列表、字典等就不行。

2.字典常用操作

my_dict = {"name": "张三", "age": 25, "city": "北京"}

访问字典中的值

# 访问字典中的值
print(my_dict["name"])

修改字典中的值

# 修改字典中的值
my_dict["age"] = 26

添加键值对

# 添加键值对
my_dict["job"] = "程序员"
print(my_dict)

删除键值对

# 删除键值对
del my_dict["city"]
print(my_dict)

获取字典的长度

# 获取字典的长度
print(len(my_dict))

获取字典的所有键

# 获取字典的所有键
print(my_dict.keys())

获取字典的所有值

# 获取字典的所有值
print(my_dict.values())

获取字典的所有键值对

# 获取字典的所有键值对
print(my_dict.items())

遍历字典的键值对

# 遍历字典的键值对
for key, value in my_dict.items():print(key, value)

合并两个字典

# 合并两个字典
dict1 = {"a": 1, "b": 2}
dict2 = {"c": 3, "d": 4}
merged_dict = {**dict1, **dict2}
print(merged_dict)

结果:{'a': 1, 'b': 2, 'c': 3, 'd': 4}

上面代码的双星号(**)字典解包:使用**可以将字典解包为关键字参数,将键值对传递给函数。

# 示例代码:
def print_info(name, age, city):print("Name:", name)print("Age:", age)print("City:", city)user_info = {"name": "Alice", "age": 25, "city": "New York"}
print_info(**user_info)

结果:

Name: Alice
Age: 25
City: New York

将列表转换为字典

# 将列表转换为字典
keys = ["name", "age", "city"]
values = ["张三", 25, "北京"]
list_to_dict = dict(zip(keys, values))
print(list_to_dict)

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。

我们可以使用 list() 转换来输出列表。

a = [1, 2, 3]
b = [4, 5, 6]
zipped = zip(a, b)
print(list(zipped))结果: [(1, 4), (2, 5), (3, 6)]

当指定key不存在时,将value设置为 0

dct[key] = dct.get(key, 0)

让字典中的某个键对应的项“离开”字典

dict = {'name': 'Alice', 'age': 23, 'address': 'Hangzhou'}
dict.pop('age')print(dict)

随机删除字典中某一键值对,并以元组的形式返回这一键值对,返回并删除字典中的最后一对键和值。

dict = {'name': 'Alice', 'age': 23, 'address': 'Hangzhou'}
print(dict.popitem()) # ('address', 'Hangzhou')
print(dict) # {'name': 'Alice', 'age': 23}

对 popitem() 的说明 其实,说 popitem() 随机删除字典中的一个键值对是不准确的,虽然字典是一种无序的列表,但键值对在底层也是有存储顺序的,popitem() 总是弹出底层中的最后一个 key-value,这和列表的 pop() 方法类似,都实现了数据结构中“出栈”的操作。

key not in d


my_dict = {'one': 1, 'two': 2, 'three': 3}
'one' not in my_dict 
False
'four' not in my_dict 
True

3.进阶用法

使用字典推导式过滤字典

# 使用字典推导式过滤字典
my_dict={"a": 100, "b": 25, "c": 300, "d": 10}
filtered_dict = {key: value for key, value in my_dict.items() if value > 25}
print(filtered_dict)

结果:{'a': 100, 'c': 300}

使用字典推导式对字典的值进行操作

# 使用字典推导式对字典的值进行操作
my_dict={"a": 100, "b": 25, "c": 300, "d": 10}
updated_dict = {key: value*2 for key, value in my_dict.items()}
print(updated_dict)

结果:{'a': 200, 'b': 50, 'c': 600, 'd': 20}

使用字典推导式对字典的键和值进行操作

# 使用字典推导式对字典的键和值进行操作
my_dict={"a": 100, "b": 25, "c": 300, "d": 10}
transformed_dict = {key.upper(): value*2 for key, value in my_dict.items()}
print(transformed_dict)

结果:{'A': 200, 'B': 50, 'C': 600, 'D': 20}

使用字典推导式将列表转换为字典,并指定默认值

# 使用字典推导式将列表转换为字典,并指定默认值
keys = ["name", "age", "city"]
values = ["张三", 25]
list_to_dict = {key: values[i] if i < len(values) else "未知" for i, key in enumerate(keys)}
print(list_to_dict)

结果:{'name': '张三', 'age': 25, 'city': '未知'}

使用字典推导式将元组转换为字典,并指定默认值

# 使用字典推导式将元组转换为字典,并指定默认值
tuples = (("name", "张三"), ("age", 25), ("city", "北京"))
tuple_to_dict = {key: value if key in dict(tuples) else "未知" for key, value in tuples}
print(tuple_to_dict)

结果:{'name': '张三', 'age': 25, 'city': '北京'}

使用字典推导式对字典进行排序

# 使用字典推导式对字典进行排序
my_dict={"a": 100, "b": 25, "c": 300, "d": 10}
sorted_dict = {key: value for key, value in sorted(my_dict.items(), key=lambda item: item[1])}
print(sorted_dict)

结果:{'d': 10, 'b': 25, 'a': 100, 'c': 300}

键排序:

my_dict = {'b': 3, 'a': 1, 'c': 2}
sorted_keys = sorted(my_dict)print(sorted_keys)  # 输出:['a', 'b', 'c']

值排序:

my_dict = {'b': 3, 'a': 1, 'c': 2}
sorted_values = sorted(my_dict.values())print(sorted_values)  # 输出:[1, 2, 3]

使用字典推导式对字典进行去重(删除重复数据,一个不留)

# 使用字典推导式对字典进行去重
my_dict={"a": 100, "e": 100, "c": 300, "d": 10}
unique_dict = {key: value for key, value in my_dict.items() if value not in [v for k, v in my_dict.items() if k != key]}
print(unique_dict)

结果:{'c': 300, 'd': 10}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/856542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

审稿人:拜托,请把模型时间序列去趋势!!

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 时间序列分析是数据科学中一个重要的领域。通过对时间序列数据的分析&#xff0c;我们可以从数据中发现规律、预测未来趋势以及做出决策…

web中间件漏洞-Resin漏洞-密码爆破、上传war

web中间件漏洞-Resin漏洞-密码爆破、上传webshell 使用爆破结果resin/resin进入后台&#xff0c;选择deploy。想部署webshell,得使用SSL方式请求&#xff0c;访问https://192.168.1.2:8443/resin-admin/index.php?qdeploy&s0(注&#xff1a;如果使用最新的火狐浏览器或者谷…

vb.net帮助文档

vb.net帮助文档&#xff1a;https://download.csdn.net/download/wgxds/89462555

[论文笔记]Are Large Language Models All You Need for Task-Oriented Dialogue?

引言 今天带来论文Are Large Language Models All You Need for Task-Oriented Dialogue?的笔记。 主要评估了LLM在完成多轮对话任务以及同外部数据库进行交互的能力。在明确的信念状态跟踪方面&#xff0c;LLMs的表现不及专门的任务特定模型。然而&#xff0c;如果为它们提…

C语言中字符串处理函数

目录 前言 1. strlen 测字符串长度函数 2.字符串拷贝函数 2.1strcpy 2.2 strncpy 3.strcat字符串追加函数 4. strcmp/strncmp 比较函数 5.字符查找函数 5.1 strchr 5.2 strrchr 6.atoi/atol/atof字符串转换数值 总结 前言 从0开始记录我的学习历程&#xff0c;我会尽…

一小时搞定JavaScript(1)——JS基础

前言,本篇文章是依据bilibili博主(波波酱老师)的学习笔记,波波酱老师讲的很好,很适合速成!!! 本篇文章会与java进行对比学习,因为JS中很多语法和java是相同的,所以大家最好熟悉Java语言后再来进行学习,效果更佳,见效更快. 文章目录 1.基本语法1.1 JS语言的特点1.2 创建一个JS文…

【Qt快速入门(四)】- QLabel文本框的使用

目录 Qt快速入门&#xff08;四&#xff09;- QLabel文本框的使用QLabel文本框的使用QLabel的基本用法1. 创建和设置文本2. 动态设置文本 设置文本样式1.设置字体和颜色2.文本对齐方式3.富文本显示 显示图片QLabel的交互功能可点击标签 QLabel的高级特性1.缩放图片以适应标签大…

开发一个软件自动运行工具不可缺少的源代码分享!

在软件开发领域&#xff0c;自动运行工具扮演着至关重要的角色&#xff0c;它们能够简化软件部署、提升运行效率&#xff0c;并在很大程度上降低人为操作失误的可能性。 而一个高效的自动运行工具的背后&#xff0c;往往是经过精心设计与实现的源代码在默默支撑&#xff0c;本…

如何解决资源管理器被结束任务后的问题,怎么重启或新建资源管理器任务?

服务器上运行的东西太多&#xff0c;修改个文件夹的名字导致卡死。结束任务后导致系统页面空白。&#xff08;关闭了windows资源管理器&#xff09; 按CtrlShiftDelete没有反应。 按CtrlShiftEsc没有反应。 按CtrlShiftEnd没有反应。 按CtrlALTEnd有反应。 (win2012) 输入…

让NSdata对象转变成UIImage对象再裁剪图片的方法

下面的代码是从自己项目代码里抠出来的&#xff0c;作为自己的笔记&#xff0c;raw文件尚未测试&#xff0c;有问题可以留言。 - (void)p_cropImg {// 1. 获取待裁剪图片. 暂时让方向固定为upUIImage *image [UIImage imageWithData:self.photoData];image kCGImageProperty…

贝锐蒲公英异地组网方案:实现制药设备远程监控、远程运维

公司业务涉及放射性药品的生产与销售&#xff0c;在全国各地拥有20多个分公司。由于药品的特殊性&#xff0c;在日常生产过程中&#xff0c;需要符合药品监管规范要求&#xff0c;对各个分部的气相、液相设备及打印机等进行监管&#xff0c;了解其运行数据及工作情况。 为满足这…

QT截图程序三-截取自定义多边形

上一篇文章QT截图程序&#xff0c;可多屏幕截图二&#xff0c;增加调整截图区域功能-CSDN博客描述了如何截取&#xff0c;具备调整边缘功能后已经方便使用了&#xff0c;但是与系统自带的程序相比&#xff0c;似乎没有什么特别&#xff0c;只能截取矩形区域。 如果可以按照自己…

conda创建虚拟环境报错解决

1.报错截图 2.解决办法 查看当前所有虚拟环境 conda env list 解决办法 解决方法 bash conda config --add channels conda-forge conda config --set channel_priority strict conda config --set channel_priority flexible

GitLab项目组相关操作(创建项目组Group、创建项目组的项目、为项目添加成员并赋予权限)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。 君不见,黄河之水天上来,奔流到海不复回。 君不见,高堂明镜悲白发,朝如青丝暮成雪。 ——《将…

视频监控平台功能:国外的硬盘录像机NVR通过ISUP协议(原ehome协议)接入AS-V1000视频平台

目录 一、背景说明 二、ISUP协议介绍 1、海康ISUP协议概述 2、ISUP协议支持主码流和子码流切换 &#xff08;1&#xff09;灵活配置和个性化 &#xff08;2&#xff09;适应不同网络带宽&#xff0c;提高使用体验 3、海康ehome相关文章 三、ISUP协议接入说明 1、平台侧…

探索深度学习:PyTorch与Transformer的区别与联系

一、引言 深度学习领域不断涌现出新的工具和方法&#xff0c;其中PyTorch和Transformer是两种备受瞩目的技术。PyTorch作为一个灵活且强大的深度学习框架&#xff0c;已经被广泛应用于学术研究和工业界。而Transformer模型则彻底改变了自然语言处理&#xff08;NLP&#xff09…

【Day01】0基础微信小程序入门-学习笔记

文章目录 今日学习目标小程序简介1. 小程序和普通网页开发的区别2. 体验小程序 第一个小程序1.第一个小程序-注册2.第一个小程序-安装开发者工具3.第一个小程序-创建小程序项目 小程序代码构成1.小程序代码构成-项目结构2. 小程序代码构成-JSON文件3. 小程序代码构成-WXML模板4…

【DKN: Deep Knowledge-Aware Network for News Recommendation】

DKN: Deep Knowledge-Aware Network for News Recommendation 摘要 在线新闻推荐系统旨在解决新闻信息爆炸的问题&#xff0c;为用户进行个性化推荐。 总体而言&#xff0c;新闻语言高度凝练&#xff0c;充满知识实体和常识。 然而&#xff0c;现有的方法并没有意识到这些外部…

Javase.String 类

String 类 【本节目标】1. String类的重要性2. 常用方法2.1 字符串构造2.2 String对象的比较2.3 字符串查找2.4 转化2.5 字符串替换2.7 字符串截取2.8 其他操作方法2.9 字符串的不可变性2.10 字符串修改 3. StringBuilder和StringBuffer3.2 面试题&#xff1a; 4. String类oj4.…

软件开发为什么写日志,怎样写日志,什么时候写日志?

目录 一、为什么需要写日志 二、什么时候写日志 三、日志是写给谁看的 四、日志里都要写什么 五、日志的组织形式应该怎样 六、综上所述 在软件系统中&#xff0c;记录日志是基本且必要的操作&#xff0c;这一点几乎是所有开发者的共识。各种编程语言中都有众多的日志框架…