Python 学习中什么是字典,如何操作字典?

什么是字典

字典(Dictionary)是Python中的一种内置数据结构,用于存储键值对(key-value pair)。字典的特点是通过键来快速查找值,键必须是唯一的,而值可以是任何数据类型。字典在其他编程语言中通常被称为哈希表或关联数组。

字典使用花括号 {} 括起来,键值对之间用逗号 , 分隔,每个键和值之间用冒号 : 分隔。例如:

my_dict = {'name': 'John','age': 25,'city': 'New York'
}

创建字典

创建字典的方法有多种,可以使用花括号 {}dict() 函数。

使用花括号创建字典
# 创建一个空字典
empty_dict = {}# 创建一个带有初始键值对的字典
person = {'name': 'Alice','age': 30,'city': 'Seattle'
}
使用 dict() 函数创建字典
# 创建一个空字典
empty_dict = dict()# 使用关键字参数创建字典
person = dict(name='Bob', age=25, city='San Francisco')# 从键值对的列表创建字典
person = dict([('name', 'Carol'), ('age', 22), ('city', 'Chicago')])

访问字典元素

可以通过键来访问字典中的值。如果键不存在,会引发 KeyError

person = {'name': 'David','age': 28,'city': 'Los Angeles'
}# 通过键访问值
print(person['name'])  # 输出 'David'# 使用 get() 方法访问值,若键不存在则返回 None 或指定的默认值
print(person.get('age'))  # 输出 28
print(person.get('gender'))  # 输出 None
print(person.get('gender', 'Unknown'))  # 输出 'Unknown'

修改字典元素

可以通过键修改字典中的值,如果键不存在,则会添加新的键值对。

person = {'name': 'Eve','age': 35,'city': 'Boston'
}# 修改已有键的值
person['age'] = 36
print(person)  # 输出 {'name': 'Eve', 'age': 36, 'city': 'Boston'}# 添加新的键值对
person['gender'] = 'Female'
print(person)  # 输出 {'name': 'Eve', 'age': 36, 'city': 'Boston', 'gender': 'Female'}

删除字典元素

可以使用 del 语句或 pop() 方法删除字典中的键值对。

person = {'name': 'Frank','age': 40,'city': 'Denver'
}# 使用 del 删除键值对
del person['city']
print(person)  # 输出 {'name': 'Frank', 'age': 40}# 使用 pop() 方法删除键值对并返回被删除的值
age = person.pop('age')
print(age)  # 输出 40
print(person)  # 输出 {'name': 'Frank'}

字典的常用操作

获取字典的键、值和键值对

可以使用 keys()values()items() 方法分别获取字典的键、值和键值对。

person = {'name': 'Grace','age': 29,'city': 'Houston'
}# 获取所有键
keys = person.keys()
print(keys)  # 输出 dict_keys(['name', 'age', 'city'])# 获取所有值
values = person.values()
print(values)  # 输出 dict_values(['Grace', 29, 'Houston'])# 获取所有键值对
items = person.items()
print(items)  # 输出 dict_items([('name', 'Grace'), ('age', 29), ('city', 'Houston')])
遍历字典

可以使用 for 循环遍历字典的键、值或键值对。

person = {'name': 'Hank','age': 45,'city': 'Miami'
}# 遍历字典的键
for key in person:print(key, person[key])# 遍历字典的键和值
for key, value in person.items():print(key, value)
合并字典

可以使用 update() 方法将一个字典的键值对更新到另一个字典中。如果键已存在,则更新其值;如果键不存在,则添加新的键值对。

dict1 = {'name': 'Ivy', 'age': 32}
dict2 = {'city': 'Atlanta', 'age': 33}# 使用 update() 方法合并字典
dict1.update(dict2)
print(dict1)  # 输出 {'name': 'Ivy', 'age': 33, 'city': 'Atlanta'}

字典的高级操作

字典推导式

字典推导式是一种简洁的创建字典的方法,类似于列表推导式。语法为 {key: value for item in iterable}

# 创建一个平方字典
squares = {x: x**2 for x in range(6)}
print(squares)  # 输出 {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}# 过滤字典中的元素
person = {'name': 'Jack', 'age': 50, 'city': 'Seattle', 'country': 'USA'}
filtered_dict = {k: v for k, v in person.items() if k != 'age'}
print(filtered_dict)  # 输出 {'name': 'Jack', 'city': 'Seattle', 'country': 'USA'}
嵌套字典

字典可以包含其他字典作为其值,这使得字典可以用于表示更复杂的数据结构。

# 嵌套字典示例
students = {'John': {'age': 20, 'major': 'Computer Science'},'Alice': {'age': 22, 'major': 'Mathematics'},'Bob': {'age': 21, 'major': 'Physics'}
}# 访问嵌套字典中的元素
print(students['Alice']['major'])  # 输出 'Mathematics'# 添加新的嵌套字典
students['Eve'] = {'age': 23, 'major': 'Biology'}
print(students)

字典的实际应用

统计字符出现次数

字典可以用于统计字符串中每个字符出现的次数。

text = "hello world"# 统计字符出现次数
char_count = {}
for char in text:if char in char_count:char_count[char] += 1else:char_count[char] = 1print(char_count)  # 输出 {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
存储和查询配置参数

字典可以用于存储和查询应用程序的配置参数。

# 配置参数字典
config = {'host': 'localhost','port': 8080,'debug': True
}# 访问配置参数
print(config['host'])  # 输出 'localhost'
print(config['port'])  # 输出 8080# 修改配置参数
config['debug'] = False
print(config)  # 输出 {'host': 'localhost', 'port': 8080, 'debug': False}
将字典转换为JSON

在处理API请求或响应时,通常需要将字典转换为JSON格式,可以使用 json 模块实现。

import json# 字典
person = {'name': 'Kate','age': 27,'city': 'San Diego'
}# 将字典转换为JSON字符串
person_json = json.dumps(person)
print(person_json)  # 输出 '{"name": "Kate", "age": 27, "city": "San Diego"}'# 将JSON字符串转换为字典
person_dict = json.loads(person_json)
print(person_dict)  # 输出 {'name': 'Kate', 'age': 27, 'city': 'San Diego'}

字典的注意事项

  1. 键必须是可哈希的:字典的键必须是不可变类型,如字符串、数字、元组等。列表、字典等可变类型不能作为字典的键。
  2. 字典是无序的:在Python 3.7之前,字典是无序的。从Python 3.7开始,字典的插入顺序被保留,但不应依赖于此特性。
  3. 字典的性能:字典的查找、插入和删除操作在平均情况下都是O(1)时间复杂度,但最坏情况下可能会退化为O(n)。

字典是Python中强大且灵活的数据结构,适用于需要快速查找、插入和删除操作的场景。通过对字典的创建、访问、修改、删除等基本操作的理解,以及高级操作如字典推导式和嵌套字典的应用,可以更好地利用字典处理复杂的数据结构和实现高效的算法。

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

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

相关文章

vue实现搜索文章关键字,滑到指定位置并且高亮

1、输入搜索条件&#xff0c;点击搜索按钮 2、滑到定位到指定的搜索条件。 <template><div><div class"search_form"><el-inputv-model"searchVal"placeholder"请输入关键字查询"clearablesize"small"style&quo…

对于老百姓而言VR到底能做什么?

VR技术自诞生以来不断发展&#xff0c;已经广泛应用于教育、医疗、工程、军事、航空、航海、影视、娱乐等方面&#xff0c;譬如&#xff0c;大型工程或军事活动VR预演可以大幅度减少人力物力投入&#xff1b;在航空领域&#xff0c;航天飞行员在训练舱中面对屏幕进行各种驾驶操…

【Linux进阶】文件系统4——文件系统特性

1.磁盘组成与分区的复习 首先说明一下磁盘的物理组成&#xff0c;整块磁盘的组成主要有&#xff1a; 圆形的碟片&#xff08;主要记录数据的部分&#xff09;&#xff1b;机械手臂&#xff0c;与在机械手臂上的磁头&#xff08;可擦写碟片上的数据);主轴马达&#xff0c;可以…

打开浏览器控制台,点击应用,浏览器崩溃

调试的时候&#xff0c;打开控制台&#xff0c;点击 “应用” 立马浏览器奔溃&#xff0c;但是点击别的没问题 调查发现是因为manifest.json这个文件引起的 manifest.json 最主要的原因是因为没有设置这个sizes字段 Google浏览器更新大概到126之后的版本会有问题&#xff0c;之…

AI多模态教程:Qwen-VL多模态大模型实践指南

一、模型介绍 Qwen-VL&#xff0c;由阿里云研发的大规模视觉语言模型&#xff08;Large Vision Language Model, LVLM&#xff09;&#xff0c;代表了人工智能领域的一个重大突破。该模型具有处理和关联图像、文本、检测框等多种类型数据的能力&#xff0c;其输出形式同样多样…

代码随想录Day69(图论Part05)

并查集 // 1.初始化 int fa[MAXN]; void init(int n) {for (int i1;i<n;i)fa[i]i; }// 2.查询 找到的祖先直接返回&#xff0c;未进行路径压缩 int.find(int i){if(fa[i] i)return i;// 递归出口&#xff0c;当到达了祖先位置&#xff0c;就返回祖先elsereturn find(fa[i])…

基于Python爬虫的城市二手房数据分析可视化

基于Python爬虫的城市二手房数据分析可视化 一、前言二、数据采集(爬虫,附完整代码)三、数据可视化(附完整代码)3.1 房源面积-总价散点图3.2 各行政区均价3.3 均价最高的10个小区3.4 均价最高的10个地段3.5 户型分布3.6 词云图四、如何更换城市一、前言 二手房具有价格普…

CSS position属性之relative和absolute

目录 1 参考文章2 五个属性值3 position:static4 position:relative&#xff08;相对&#xff09;5 position:absolute&#xff08;绝对&#xff09; 1 参考文章 https://blog.csdn.net/lalala_dxf/article/details/123566909 https://blog.csdn.net/WangMinGirl/article/deta…

最灵活且易用的C++开源串口通信调试软件

这款C开源串口调试软件&#xff0c;集成了丰富的功能&#xff0c;为用户提供高效、便捷的串口通信调试体验。以下是其核心功能亮点&#xff1a; 基础功能&#xff1a; 数据交互自如&#xff1a;支持串口数据的轻松读取与发送&#xff0c;让数据交换变得简单直接。 灵活配置参…

基于顺序表的通讯录实现

一、前言 基于已经学过的顺序表&#xff0c;可以实现一个简单的通讯录。 二、通讯录相关头文件 //Contact.h #pragma once#define NAME_MAX 20 #define TEL_MAX 20 #define ADDR_MAX 20 #define GENDER_MAX 20typedef struct PersonInfo {char name[NAME_MAX];char gender[G…

Python的招聘数据分析与可视化管理系统-计算机毕业设计源码55218

摘要 随着互联网的迅速发展&#xff0c;招聘数据在规模和复杂性上呈现爆炸式增长&#xff0c;对数据的深入分析和有效可视化成为招聘决策和招聘管理的重要手段。本论文旨在构建一个基于Python的招聘数据分析与可视化管理系统。 该平台以主流招聘平台为数据源&#xff0c;利用Py…

昇思25天学习打卡营第2天|MindSpore快速入门

打卡 目录 打卡 快速入门案例&#xff1a;minist图像数据识别任务 案例任务说明 流程 1 加载并处理数据集 2 模型网络构建与定义 3 模型约束定义 4 模型训练 5 模型保存 6 模型推理 相关参考文档入门理解 MindSpore数据处理引擎 模型网络参数初始化 模型优化器 …

如何选择TikTok菲律宾直播网络?

为了满足用户对于实时互动的需求&#xff0c;TikTok推出了直播功能&#xff0c;让用户能够与粉丝即时交流。本文将探讨如何选择适合的TikTok菲律宾直播网络&#xff0c;并分析OgLive是否是值得信赖的选择。 TikTok菲律宾直播网络面临的挑战 作为全球领先的短视频平台&#xff…

Python + OpenCV 开启图片、写入储存图片

这篇教学会介绍OpenCV 里imread()、imshow()、waitKey() 方法&#xff0c;透过这些方法&#xff0c;在电脑中使用不同的色彩模式开启图片并显示图片。 imread() 开启图片 使用imread() 方法&#xff0c;可以开启图片&#xff0c;imread() 有两个参数&#xff0c;第一个参数为档…

Google Play上架:恶意软件、移动垃圾软件和行为透明度详细解析和解决办法 (一)

近期整理了许多开发者的拒审邮件和内容,也发现了许多问题,今天来说一下关于恶意软件这类拒审的问题。 目标邮件如下: 首先说一下各位小伙伴留言私信的一个方法,提供你的拒审邮件和时间,尽可能的详细,这样会帮助我们的团队了解你们的问题,去帮助小伙伴么解决问题。由于前…

集成学习(一)Bagging

前边学习了&#xff1a;十大集成学习模型&#xff08;简单版&#xff09;-CSDN博客 Bagging又称为“装袋法”&#xff0c;它是所有集成学习方法当中最为著名、最为简单、也最为有效的操作之一。 在Bagging集成当中&#xff0c;我们并行建立多个弱评估器&#xff08;通常是决策…

排序——数据结构与算法 总结8

目录 8.1 排序相关概念 8.2 插入排序 8.2.1 直接插入排序&#xff1a; 8.2.2 折半插入排序&#xff1a; 8.2.3 希尔排序&#xff1a; 8.3 交换排序 8.3.1 冒泡排序&#xff1a; 8.3.2 快速排序&#xff1a; 8.4 选择排序 8.4.1 简单选择排序 8.4.2 堆排序 8.5 归并…

磁盘就是一个超大的Byte数组,操作系统是如何管理的?

磁盘在操作系统的维度看&#xff0c;就是一个“超大的Byte数组”。 那么操作系统是如何对这块“超大的Byte数组”做管理的呢&#xff1f; 我们知道在逻辑上&#xff0c;上帝说是用“文件”的概念来进行管理的。于是&#xff0c;便有了“文件系统”。那么&#xff0c;文件系统…

最新版情侣飞行棋dofm,已解锁高阶私密模式,单身狗务必绕道!(附深夜学习资源)

今天阿星要跟大家聊一款让阿星这个大老爷们儿面红耳赤的神奇游戏——情侣飞行棋。它的神奇之处就在于专为情侣设计&#xff0c;能让情侣之间感情迅速升温&#xff0c;但单身狗们请自觉绕道&#xff0c;不然后果自负哦&#xff01; 打开游戏&#xff0c;界面清新&#xff0c;操…

HTML5使用<progress>进度条、<meter>刻度条

1、<progress>进度条 定义进度信息使用的是 progress 标签。它表示一个任务的完成进度&#xff0c;这个进度可以是不确定的&#xff0c;只是表示进度正在进行&#xff0c;但是不清楚还有多少工作量没有完成&#xff0c;也可以用0到某个最大数字&#xff08;如&#xff1…