当前位置: 首页 > article >正文

08_Python数据类型_字典

在这里插入图片描述

Python的基础数据类型

  • 数值类型:整数、浮点数、复数、布尔
  • 字符串
  • 容器类型:列表、元祖、字典、集合

字典

  • 字典(Dictionary)是一种可变容器模型,它可以存储任意类型对象,其中每个对象都存储为一个键值对。
  • 字典是Python中唯一内建的映射类型,通常用于存储具有映射关系的数据。
  • 一个元素分为两部分:key:value,键值对。

定义字典

字典是由大括号 {} 包围的键值对集合,每个键值对由冒号 : 分隔,不同的键值对之间用逗号 , 分隔。

# 创建一个空字典
empty_dict = {}
print(empty_dict)
# 创建一个包含几个键值对的字典
my_dict = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
print(my_dict)

字典的特性

  • 字典中的键必须是唯一的,而值不必是唯一的。
  • 字典中的键必须是不可变的数据类型,如字符串、数字或元组,但不能是列表或字典。
  • 字典是无序的,尽管在Python 3.7+中,字典会保持插入顺序。

访问字典元素

可以通过键来访问字典中的值。

# 访问字典中的值
value = my_dict['key1']  # 结果是 'value1'
print(value)

如果尝试访问一个不存在的键,将会抛出 KeyError。

# value4 = my_dict['key4']  # 结果是 KeyError

字典操作

字典支持多种操作,如下所示:

  • 添加键值对:直接赋值给新的键。
  • 修改键值对:直接赋值给已存在的键。
  • 删除键值对:使用 del 语句或 pop() 方法。
print(my_dict)
# 添加键值对
my_dict['new_key'] = 'new_value'
print(my_dict)
my_dict.setdefault('new_key2', 'new_value2')
print(my_dict)
# 修改键值对
my_dict['key1'] = 'updated_value'
print(my_dict)
# 删除键值对
del my_dict['key2']
print(my_dict)
# 或者, 根据key删除键值对。
removed_value = my_dict.pop('key3')
print(my_dict)

字典方法

字典提供了许多有用的方法,如:

  • keys():返回字典中的所有键。
  • values():返回字典中的所有值。
  • items():返回字典中的所有键值对。
  • get():返回指定键的值,如果键不存在,则返回默认值(默认为 None)。没有找到不会报错,可以设置查找不到的返回默认值。
  • update():使用另一个字典的键值对更新当前字典。
# 获取字典中的所有键
keys = my_dict.keys()
print(keys)
# 获取字典中的所有值
values = my_dict.values()
print(values)
# 获取字典中的所有键值对,返回元组的形式。
items = my_dict.items()
print(items)
# 安全地获取字典中的值
value = my_dict.get('key1', 'default_value')
print(value)
# 更新字典
my_dict.update({'key4': 'value4', 'key5': 'value5'})
print(my_dict)

遍历字典

  • 默认遍历key
  • 可以遍历key
  • 可以遍历value
  • 可以遍历键值对
# 默认遍历key
for i in my_dict:
  print(i)

# 遍历key
for k in my_dict.keys():
  print(k)

# 遍历value
for v in my_dict.values():
  print(v)

# 遍历键值对
for k, v in my_dict.items():
  print(k, v)

字典推导式

与列表推导式类似,字典推导式可以用来生成字典。

# 创建一个字典,键为0-9每个数字,值为每个数字的平方
squared_dict = {x: x**2 for x in range(10)}
print(squared_dict)
# 字典推导式
new_dict = {k:v for k,v in my_dict.items()}
print(new_dict)
# 带条件的字典推导式
my_dict6 = {'张三':95, '李四':60, '王五':85, '赵六':30}
new_dict = {k:v for k,v in my_dict6.items() if v >= 85}
print(new_dict)

字典的复制

字典的复制可以通过直接赋值、浅拷贝或深拷贝来实现。

  • 直接赋值:新变量引用同一个字典。
  • 浅拷贝:创建一个新字典,但不复制内部对象的引用。
  • 深拷贝:创建一个新字典,并递归地复制内部对象。
import copy

# 直接赋值
dict1 = {'a': 1, 'b': 2,'c':{'a': 1}}
dict2 = dict1  # dict2 是 dict1 的引用
print("dict1:",dict1)
print("dict2:",dict2)
print("id(dict1):",id(dict1))
print("id(dict1['c']):",id(dict1['c']))
print("id(dict2):",id(dict2))
# 浅拷贝
dict3 = copy.copy(dict1)
print("dict3:",dict3)
print("id(dict3):",id(dict3))
print("id(dict3['c']):",id(dict3['c']))
# 深拷贝
dict4 = copy.deepcopy(dict1)
print("dict4:",dict4)
print("id(dict4):",id(dict4))
print("id(dict4['c']):",id(dict4['c']))

字典是Python中非常强大的数据结构,它提供了灵活的数据存储和访问方式,适用于各种需要键值对映射的场景。

附件

本文对应的jupyter notebook源码链接,欢迎下载练习:https://download.csdn.net/download/fx_yzjy101/89760981

如有问题请留言。


http://www.kler.cn/a/307335.html

相关文章:

  • C++编程:利用环形缓冲区优化 TCP 发送流程,避免 Short Write 问题
  • 《新智慧》期刊的征稿范围主要包括哪些方面?
  • JFROG相关API
  • 4.4 软件设计:UML顺序图
  • MySQL技巧之跨服务器数据查询:进阶篇-从A数据库复制到B数据库的表中
  • 深入理解接口测试:实用指南与最佳实践5.0(三)
  • C# 记录一个获取系统空闲时间的函数,可用于判断休眠
  • 性能测试:Locust使用介绍(三)
  • MoCo对比损失
  • LC并联电路在正弦稳态下的传递函数推导(LC并联谐振选频电路)
  • 带你如何使用CICD持续集成与持续交付
  • 2024网络安全、应用软件系统开发决赛技术文件
  • Go语言现代web开发15 泛型和错误
  • C++中string字符串类型介绍及数组模拟
  • TDengine 与 SCADA 强强联合:提升工业数据管理的效率与精准
  • 如何在 Ubuntu 系统上部署 Laravel 项目 ?
  • 基于JavaWeb开发的Java+SpringMvc+vue+element实现上海汽车博物馆平台
  • [NSSRound#4 SWPU]hide_and_seek-用gdb调试
  • 美团图床设置教程
  • 基于深度学习的自动化农场管理
  • leetcode14.最长公共前缀
  • 鸿蒙 ArkUI组件二
  • 鹏哥C语言36-37---循环/分支语句练习(折半查找算法)
  • RNN股票预测(Pytorch版)
  • 大模型参数高效微调技术原理综述(八)-MAM Adapter、UniPELT
  • Redhat 8,9系(复刻系列) 一键部署Oracle23ai rpm