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

Python3(11) 字典

        在 Python 编程中,字典(Dictionary)是一种功能强大且灵活的数据结构。它以键值对(key-value pairs)的形式存储数据,允许快速查找和修改数据,广泛应用于各种编程场景。下面结合菜鸟教程内容,通过代码示例深入学习 Python3 字典知识,方便后续复习回顾。

一、字典的创建

1.1 使用花括号创建

        使用花括号{}包裹键值对,键值对之间用逗号分隔,键与值之间用冒号分隔,即可创建字典。例如:

person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print(person)

        上述代码创建了一个包含姓名、年龄和城市信息的字典,并打印输出。字典中的键必须是唯一的,值可以是任意数据类型。

1.2 创建空字典

        创建空字典有两种方式,一种是直接使用{},另一种是使用内置函数dict()。示例如下:

# 使用花括号创建空字典
empty_dict1 = {}
print(empty_dict1)# 使用dict()函数创建空字典
empty_dict2 = dict()
print(empty_dict2)

        两种方式都能创建空字典,在后续需要动态添加数据时非常有用。

1.3 使用 dict () 函数创建字典

  dict()函数还可以通过其他方式创建字典。例如,传入关键字参数:

student = dict(name='Bob', grade=95)
print(student)

        或者传入包含键值对的元组或列表:

data = [('x', 10), ('y', 20)]
coordinates = dict(data)
print(coordinates)

        这种方式在处理一些需要转换为字典的数据时很方便。


二、访问字典里的值

        通过将键放在方括号[]中,可以访问字典中对应的值。例如:

person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print(person['name'])  
print(person['age'])  

        运行代码后,分别输出字典personnameage键对应的值。

        需要注意的是,如果使用字典中不存在的键访问数据,会引发KeyError异常。例如:

# print(person['gender'])  

        运行这行代码会报错,提示KeyError: 'gender',因为person字典中没有gender这个键。

        为了避免这种错误,可以使用get()方法来访问值。get()方法在键不存在时,会返回指定的默认值(默认为None)。例如:

print(person.get('gender'))  
print(person.get('gender', 'Unknown'))  

        第一个get()方法返回None,第二个get()方法返回指定的默认值Unknown


三、修改字典

3.1 更新键值对

        如果要修改字典中已有的键值对,直接给键赋值新的值即可。例如:

person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
person['age'] = 31
print(person)  

        上述代码将person字典中age键的值从 30 更新为 31。

3.2 添加新键值对

        添加新键值对的方式与修改类似,只需使用一个不存在的键进行赋值操作。例如:

person['job'] = 'Engineer'
print(person)  

        运行代码后,person字典中新增了job键及其对应的值Engineer

3.3 使用 update () 方法更新字典

  update()方法可以将另一个字典的键值对更新到当前字典中。如果有相同的键,会覆盖当前字典中的值;如果是新的键,则会添加到当前字典。例如:

person = {'name': 'Alice', 'age': 30}
new_info = {'age': 31, 'city': 'San Francisco'}
person.update(new_info)
print(person)  

  person字典中的age键值被更新,同时新增了city键值对。


四、删除字典元素

4.1 删除单个键值对

        使用del语句可以删除字典中的单个键值对。例如:

person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
del person['city']
print(person)  

        运行代码后,person字典中city键值对被删除。

4.2 清空字典

        使用字典的clear()方法可以清空字典中的所有键值对,使字典变为空字典。例如:

person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
person.clear()
print(person)  

        此时person字典已被清空,输出结果为{}

4.3 删除字典

        使用del语句还可以删除整个字典对象。例如:

person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
del person
# print(person)  

        运行del person后,person字典被删除,再尝试打印会引发NameError异常,提示person未定义。


五、字典键的特性

5.1 键的唯一性

        字典中不允许同一个键出现两次。创建字典时,如果同一个键被赋值两次,后一个值会覆盖前一个值。例如:

info = {'name': 'Bob', 'name': 'Tom'}
print(info['name'])  

        运行代码后,info字典中name键对应的值为Tom,前面赋值的Bob被覆盖。

5.2 键的不可变性

        键必须是不可变的数据类型,如字符串、数字或元组。列表等可变类型不能作为字典的键,否则会引发TypeError异常。例如:

# bad_dict = {[1, 2]: 'value'}  

        运行这行代码会报错,提示TypeError: unhashable type: 'list',因为列表是不可哈希的,不能作为字典的键。


六、字典内置函数与方法

6.1 内置函数

  1. len(dict):计算字典中键值对的数量,即键的总数。例如:
person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print(len(person))  

        输出结果为 3,表示person字典中有 3 个键值对。
2. str(dict):将字典转换为可打印的字符串表示形式。例如:

person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print(str(person))  

        输出结果为{'name': 'Alice', 'age': 30, 'city': 'New York'},方便查看字典内容。
3. type(variable):返回变量的类型。如果变量是字典,返回<class 'dict'>。例如:

person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print(type(person))  

        输出结果表明person变量的类型是字典。

6.2 内置方法

1.dict.clear():删除字典内所有元素,前面已有示例。

2.dict.copy():返回一个字典的浅复制。浅复制意味着新字典和原字典中的嵌套对象(如列表、字典等)是共享的。例如:

original = {'a': [1, 2]}
copied = original.copy()
original['a'].append(3)
print(original)  
print(copied)  

        运行代码后,原字典和复制的字典中,键a对应的值(列表)都发生了变化,因为它们共享这个列表对象。
3. dict.fromkeys():创建一个新字典,以序列中的元素作为字典的键,所有键对应同一个初始值。例如:

运行代码后,创建了一个新字典,键为['x', 'y', 'z'],对应的值均为 0。
4. dict.get(key, default=None):返回指定键的值,如果键不存在则返回默认值,前面已有示例。
5. key in dict:判断键是否在字典中,如果在返回True,否则返回False。例如:

person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print('name' in person)  
print('gender' in person)  

        运行代码后,分别判断namegender是否在person字典中,并输出相应的布尔值。
6. dict.items():以列表形式返回一个视图对象,包含字典中的所有键值对。例如:

person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
items = person.items()
print(list(items))  

        运行代码后,输出结果为[('name', 'Alice'), ('age', 30), ('city', 'New York')],方便遍历字典的键值对。
7. dict.keys():返回一个视图对象,包含字典中的所有键。例如:

person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
keys = person.keys()
print(list(keys))  

        输出结果为['name', 'age', 'city'],可用于获取字典的所有键。
8. dict.setdefault(key, default=None):和get()方法类似,但如果键不存在于字典中,将会添加键并将值设为默认值。例如:

person = {'name': 'Alice', 'age': 30}
print(person.setdefault('city', 'Unknown'))  
print(person)  

        运行代码后,由于person字典中原本没有city键,setdefault()方法添加了该键并设置值为Unknown,同时返回这个默认值。
9. dict.update(dict2):把字典dict2的键值对更新到当前字典中,前面已有示例。
10. dict.values():返回一个视图对象,包含字典中的所有值。例如:

person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
values = person.values()
print(list(values))  

        输出结果为['Alice', 30, 'New York'],用于获取字典的所有值。
11. dict.pop(key[,default]):删除字典中指定键所对应的值,并返回被删除的值。如果键不存在且没有指定默认值,会引发KeyError异常。例如:

person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
removed_age = person.pop('age')
print(removed_age)  
print(person)  

        运行代码后,删除person字典中的age键值对,并返回被删除的age值,字典中不再包含age键。
12. dict.popitem():返回并删除字典中的最后一对键和值。在 Python 3.7 及以上版本中,字典是有序的,popitem()删除的是最后插入的键值对;在之前版本中,删除的是任意一对键值对。例如:

person = {'name': 'Alice', 'age': 30, 'city': 'New York'}
popped_item = person.popitem()
print(popped_item)  
print(person)  

        运行代码后,返回并删除了person字典中的最后一对键值对,字典中相应键值对被移除。

七、总结

        Python3 字典作为一种强大的数据结构,在数据处理、配置管理等方面发挥着重要作用。通过学习字典的创建、访问、修改、删除操作,以及其键的特性和丰富的内置函数与方法,能够更加高效地利用字典解决实际编程问题。建议在日常编程中多使用字典,通过实践加深对其理解和掌握。

http://www.xdnf.cn/news/1855.html

相关文章:

  • Java学习手册:Java时间类使用
  • 16:00开始面试,16:08就出来了,问的问题有点变态。。。
  • react 常用钩子 hooks 总结
  • 《Keras 3 :使用 TFServing 提供 TensorFlow 模型》
  • Linux中你必须掌握的20个常见命令,提升工作效率!
  • 问答页面支持拖拽和复制粘贴文件,MaxKB企业级AI助手v1.10.6 LTS版本发布
  • conformer编码器
  • DeskGo 4.0(官方版)桌面管理工具软件下载及安装教程
  • JDBC之ORM思想及SQL注入
  • UWA DAY 2025 正式启动|十年筑基,驱动游戏未来引擎
  • Kubernetes 节点 Not Ready 时 Pod 驱逐机制深度解析(上)
  • Web漏洞--XSS之订单系统和Shell箱子
  • Android APP 热修复原理
  • ArrayUtils:数组操作的“变形金刚“——让你的数组七十二变
  • python实现简单的UI交互
  • RT Thread 发生异常时打印输出cpu寄存器信息和栈数据
  • C++11介绍
  • 【阿里云大模型高级工程师ACP习题集】2.5 优化RAG应用提升问答准确度(⭐️⭐️⭐️ 重点章节!!!)
  • C++面试复习日记(8)2025.4.25,malloc,free和new,delete的区别
  • Maven基础、HTTP协议、请求响应(Web后端笔记第一期)
  • 策略模式(Strategy Pattern)详解
  • 深度学习--自然语言处理统计语言与神经语言模型
  • 打造高功率、高电流和高可靠性电路板的厚铜PCB生产
  • 基于STM32的温室环境智能调控系统仿真(仿真+代码)
  • 统计术语学习
  • 鸿蒙应用开发证书考试的一点想法
  • 大量化平台也有坑?khQuant回测横评第二弹,一次“排雷”实录【AI量化第28篇】
  • GitHub每日最火火火项目(4.25)
  • 【沉浸式求职学习day25】【部分网络编程知识分享】【基础概念以及简单代码】
  • 防火墙原理与应用总结