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] += 1
    else:
        char_count[char] = 1

print(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.mfbz.cn/a/781892.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

游戏AI的创造思路-技术基础-遗传算法

遗传算法,选对了遗传算子,那就是优秀的继承者,选错了,那就是传说在祸害遗千年~~~~~ 目录 1. 定义 2. 发展历史 3. 遗传算法的基本原理和流程 3.1. 基本原理 3.1.1.基本原理 3.1.2. 算法流程 3.1.3. 关键要素 3.2. 函数和方…

栈和队列---循环队列

1.循环队列的出现 (1)上面的这个就是一个普通的数据的入队和出队的过程我们正常情况下去实现这个入队和出队的过程,就是这个数据从这个队尾进入,从队头离开,但是这个加入的时候肯定是没有其他的问题的,直接…

为什么固定尺寸 AdSense 广告依旧会出现并非指定的尺寸广告?

经常在网站上投放谷歌 AdSense广告的站长应该都碰到过,明明投放的是固定尺寸的广告位里旧会出现并非指定尺寸的AdSense 广告,很诡异的感觉。其实这都是因为你的 AdSense 账号广告优化造成的,其中里面就包含了广告尺寸优化,只需要在…

盘点当下智能体应用开发的几种形态

现在多智能体系统开发的关注度越来越高了,不光在开发者的圈子热度很高,很多职场人士,甚至是小白也参与其中,因为现在的门槛越来越低了,尤其是,最近特别火的扣子(coze)和百度的appbui…

Sequelize 操作 MySQL 数据库

安装 npm install --save sequelize安装驱动程序: npm install --save mysql2连接到数据库 要连接到数据库,必须创建一个 Sequelize 实例. 这可以通过将连接参数分别传递到 Sequelize 构造函数或通过传递一个连接 URI 来完成: const {Sequelize} re…

【Java12】封装

封装(Encapsulation)是面向对象的三大特征之一(另两个是继承和多态),指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象的内部信息,而是通过该类所提供的方法来实现对内部信息的…

[护网训练]原创应急响应靶机整理集合

前言 目前已经出了很多应急响应靶机了,有意愿的时间,或者正在准备国护的师傅,可以尝试着做一做已知的应急响应靶机。 关于后期: 后期的应急响应会偏向拓扑化,不再是单单一台机器,也会慢慢完善整体制度。…

《昇思25天学习打卡营第14天|onereal》

第14天学习内容如下: Diffusion扩散模型 本文基于Hugging Face:The Annotated Diffusion Model一文翻译迁移而来,同时参考了由浅入深了解Diffusion Model一文。 本教程在Jupyter Notebook上成功运行。如您下载本文档为Python文件&#xff0c…

Zabbix 配置grafana对接

zabbix对接grafana简介 Zabbix与Grafana对接可以实现更加丰富和美观的数据可视化,可以利用Grafana强大的可视化功能来展示Zabbix收集的数据。 Grafana 本身是提供了Zabbix的对接插件,开箱即用,安装好了之后点击 enable 一下就能启用。然后就…

深度学习中的Channel,通道数是什么?

参考文章: 直观理解深度学习的卷积操作,超赞!-CSDN博客​​​​​​如何理解卷积神经网络中的通道(channel)_神经网络通道数-CSDN博客 深度学习-卷积神经网络—卷积操作详细介绍_深度卷积的作用-CSDN博客 正文&…

护网在即,助力安服仔漏洞扫描~

整合了个漏扫系统,安服仔必备~ 使用场景 网前布防,漏洞扫描,资产梳理 使用方法: 启动虚拟机后运行命令: ./StartSystemScript.sh 输入密码attack 启动完成后浏览器打开网站: http://IP:5000 相关账户…

VSCode神仙插件——Codeium (AI编程助手)

1、安装&登录插件 安装过程中会让你登录Codeium账户,可以通过Google账户登录,或者可以注册一个Codeium账户(如果没有弹出让你登录账户的界面,可以等安装结束后在右下角找到登录的地方) 右下角显示如下图所示&#…

异常组成、作用、处理方式(3种)、异常方法、自定义异常

目录 异常的组成:运行异常与编译异常 两者区别:编译异常用来提醒程序员,运行异常大部分是由于参数传递错误导致 异常作用: 作用1:就是平时的报错,方便我们找到报错的来源 作用2:在方法内部…

计算机网络性能指标概述:速率、带宽、时延等

在计算机网络中,性能指标是衡量网络效率和质量的重要参数。本文将综合三篇关于计算机网络性能指标的文章,详细介绍速率、带宽、吞吐量、时延、时延带宽积、往返时延(RTT) 和利用率的概念及其在网络中的应用。 1. 速率(…

windows系统本地端口被占用的问题

第一步:查找所有运行的端口 按住“WindowsR”组合键,打开命令窗口,输入【cmd】命令,回车。在弹出的窗口中输入 命令【netstat -ano】,再按一下回车键 Win系统端口被占用-查找所有运行的端口 第二步:查看…

整洁架构SOLID-单一职责原则(SRP)

文章目录 定义案例分析重复的假象代码合并解决方案 小结 定义 SRP是SOLID五大设计原则中最容易被误解的一个。也许是名字的原因,很多程序员根据SRP这个名字想当然地认为这个原则就是指:每个模块都应该只做一件事。 在历史上,我们曾经这样描…

CSS技巧:纯CSS实现文字渐变动画效果

文字渐变动画&#xff0c;可以实现的有两种&#xff1a;一种是一行文字整体变化颜色&#xff1b;另一种一行文字依次变化颜色。接下来&#xff0c;我就介绍一下这两种文字渐变的实现过程。 布局代码&#xff1a; <div class"con"><div class"animate…

GPIO配置-PIN_Speed的理解

在使用STM32的GPIO 口配置时&#xff0c;经常会疑惑应该选用什么样的配置模式&#xff0c;本文谈谈对pin_speed的理解。 根据数据手册可得&#xff0c;STM32提供10MHz,2MHz和50MHz三种输出速度的配置&#xff0c;三种配置的应用场景是怎么样的&#xff1f;。 1.为什么要配置引…

力扣双指针算法题目:快乐数

目录 1.题目 2.思路解析 3.代码展示 1.题目 . - 力扣&#xff08;LeetCode&#xff09; 2.思路解析 题目意思是将一个正整数上面的每一位拿出来&#xff0c;然后分别求平方&#xff0c;最后将这些数字的平方求和得到一个数字&#xff0c;如此循环&#xff0c;如果在此循环中…

OpenEarthMap:全球高分辨率土地覆盖制图的基准数据集(开源来下载!!!)

OpenEarthMap由220万段5000张航拍和卫星图像组成&#xff0c;覆盖6大洲44个国家97个地区&#xff0c;在0.25-0.5m的地面采样距离上人工标注8类土地覆盖标签。我们提供8类标注:裸地、牧场、已开发空间、道路、树木、水、农业用地和建筑。类选择与现有的具有亚米GSD的产品和基准数…