Python系列教程
第1章 Python 语言概述
Python编程规范+最佳实践
python文件:.py,.ipynb, pyi, pyc, pyd, pyo都是什么文件?
第1章必背的内容
第2章 Python基础
字符串切片
Python数据类型大战:可变与不可变,谁主沉浮?
Python「布尔类型」:不只是True和False!
Python「枚举类型」:你真的了解枚举类型吗?
Python字符串格式化:哪种字符串格式化方法最快?
Python字符串编码:为什么你的网页显示乱码?
Python「内置变量」:不只是变量,更是编程的魔法!
Python变量的作用域,你真的了解吗?
Python中如何使用F-Strings格式化浮点数
第2章必备的内容
第3章 流程控制和异常处理
加速Python for循环
for循环
Python三元表达式:让代码简洁与效率提升成为可能
Python「While循环」:何时打破循环?
Python「异常处理」:程序出错了?不慌
这样可以减少IF语句的使用,从此告别if-else噩梦
Python循环加速的秘方,可提速上千倍!
如何在Python中优雅地使用断言?这篇文章给你答案!
Python异常处理:12个异常处理技巧,你掌握了几个?
Python中的and和or你真的会用吗,代码逻辑竟然可以如此简单!
Python的else子句7个妙用,原来还能这样用,整挺好!
快来看!Python写代码,没有pass怎么行?
第三章 必背的内容
第4章 高级数据结构
Python字典嵌套:编程界的俄罗斯套娃
Python「类型注解」:如何让你的Python代码够清晰?
列表越界了?来学学Python列表的花式操作!
Python字典的这些黑科技,你用过几个?
Python元组:为何你的代码需要这个'不变'的伙伴?
试试Python具名元组NamedTuple吧!用过的都说好
Python中的5种队列数据结构,你知道几个?
itertools模块让你的代码原地起飞!
第5章 正则表达式
正则表达式
本文档使用 MrDoc 发布
-
+
首页
Python字典的这些黑科技,你用过几个?
# 第1章 字典初识 ## 1.1 字典定义与特点 在`Python`编程语言的宇宙里,字典(`dictionary`)是一种非常强大的数据结构,它以`键-值对`(`key-value pairs`)的形式存储信息,类似于现实生活中的一本详尽的索引目录。每个键都是独一无二的,用于标识与其相关联的特定值。字典的魅力在于它提供了近乎瞬时的查找速度,这得益于其内部实现的哈希表机制。与列表或元组不同,字典是无序集合,这意味着它们不保证元素的插入顺序。 ## 1.2 字典创建方法 创建字典的方式多样,如同调色盘上的色彩,每一种都有其独特的应用场景。 ### 直接赋值法 最直观的方法是直接通过花括号`{}`来初始化一个字典,键值对之间用逗号分隔。 ```python my_dict = {'apple': 4, 'banana': 2, 'orange': 1} ``` ### 使用`dict()`构造函数 另外,也可以利用`dict()`函数来构造字典,这对于动态生成字典或者从其他序列类型转换尤为有用。 ```python another_dict = dict(apple=4, banana=2, orange=1) ``` ### 通过`zip`函数配对键值序列 如果键和值分别存储在两个列表中,可以巧妙地利用`zip()`函数和`dict()`结合创建字典。 ```python keys = ['apple', 'banana', 'orange'] values = [4, 2, 1] paired_dict = dict(zip(keys, values)) ``` ### 空字典初始化 有时,你可能需要一个空白的字典作为起点,逐步填充。 ```python empty_dict = {} ``` 每种方法都有其适用场景,灵活运用这些技巧,能够让你在编写`Python`程序时更加游刃有余。掌握字典的创建只是探索之旅的开始,接下来深入挖掘其丰富的操作和应用,将使你的代码更加高效、优雅。 # 第2章 字典基本操作 ## 2.1 添加与修改元素 在字典的日常管理中,添加新键值对或更新已有键对应的值是一项基本技能。让我们一起揭开这神秘面纱。 ### 添加元素 给字典新增一个键值对,只需将其直接赋值给相应键即可。若该键尚不存在,字典会自动为其创建新的键值对;若已存在,则会覆盖原有值。 ```python inventory = {'apples': 9, 'oranges': ½} inventory['pears'] = ¼ # 新增键值对 'pears': ¼ ``` ### 修改元素 修改字典中某个键对应的值,同样采用赋值操作。由于字典的键唯一性,直接给已有键赋予新值即可完成更新。 ```python inventory['apples'] = 10 # 更新键 'apples' 的值为 10 ``` ## 2.2 查询与访问元素 字典的核心价值在于快速查找和访问键对应的值。这里提供两种主要方式: ### 索引访问 使用中括号`[]`操作符,将键名作为索引,直接获取对应值。若键不存在,将引发`KeyError`。 ```python quantity = inventory['apples'] # 获取 'apples' 的数量 ``` ### get() 方法 更安全的做法是使用`get()`方法它接受键名作为第一个参数,并可选地设置一个默认值作为第二个参数。当键不存在时,返回默认值而非抛出异常。 ```python quantity = inventory.get('kiwis', 0) # 若 'kiwis' 不存在 ,返回 0 ``` ## 2.3 删除元素 清理字典时,可能需要移除不再需要的键值对。有两种删除方法可供选择: ### `del`语句 使用`del`语句配合字典名及待删除键,可直接从字典中移除指定键值对。若键不存在,将引发`KeyError`。 ```python del inventory['oranges'] # 删除键 'oranges' 及其值 ``` ### `pop()`方法 `pop()`方法与`del`类似,但更显灵活。它既删除键值对,又返回被删除的值。若键不存在,可选择抛出异常或通过指定默认值避免异常。 ```python value = inventory.pop('grapes') # 删除并返回 'grapes' 的值,若不存在则引发 KeyError value = inventory.pop('strawberries', None) # 删除并返回 'strawberries' 的值,若不存在则返回 None ``` ## 2.4 遍历字典 遍历字典以访问其中的所有键值对,是进行数据处理、分析或展示的关键步骤。有多种遍历方式可供选择: ### 遍历键 直接迭代字典 ,将依次获得其所有键。 ```python for fruit in inventory: print(fruit) # 输出:'apples', 'pears' ``` ### 遍历键值对 利用`items()`方法,可同时获取键及其对应的值。 ```python for fruit, count in inventory.items(): print(f"{fruit}: {count}") # 输出:'apples: 10', 'pears: ¼' ``` ### 遍历值或仅键/值 使用`values()`或`keys()`方法,可单独遍历字典的值或键。 ```python for count in inventory.values(): print(count) # 输出:10, ¼ for fruit in inventory.keys(): print(fruit) # 输出:'apples', 'pears' ``` 熟练掌握这些基本操作,就如同掌握了字典这本神奇宝典的使用指南,无论面对何种数据管理需求,都能得心应手、游刃有余。 # 第3章 字典内置函数与方法 ## 3.1 `len()`、`del()`与`clear()` 掌握字典的维护艺术,离不开几个关键的操作:了解字典的长度、精确移除项或清空整个字典。 • `len()`:这个函数像一位忠实的图书管理员,快速清点字典的键值对总数。 ```python my_dict = {'apple': 3, 'banana': 5, 'cherry': 7} size = len(my_dict) # size 为 3 ``` • `del`:当你需要从字典中永久删除特定的键值对时,`del`就像是精确的外科手术刀。 ```python del my_dict['banana'] # 删除键 'banana' 及其对应的值 ``` • `clear()`:想让字典回归初始的空白页状态?一个简单的 clear() 足矣。 ```python my_dict.clear() # 清空字典,使其变为 {} ``` ## 3.2 `keys()`, `values()`, `items()`详解 这三位好比字典的三大法宝,让你分别访问字典的键、值和键值对。 • `keys()`:它提供了一把钥匙 ,打开字典的门,只显示所有的键。 ```python keys_list = list(my_dict.keys()) # 获取所有键组成的列表 ``` • `values()`:它如同一个宝盒,里面装满了字典中所有的值。 ```python values_list = list(my_dict.values()) # 获取所有值组成的列表 ``` • `items()`:最全面的视角,它将字典的每一项打包成元组,逐一呈现。 ```python items_list = list(my_dict.items()) # 获取所有键值对组成的列表 ``` ## 3.3 `get()`与`setdefault()` 这两个方法是处理键不存在情况的高手,优雅而高效。 • `get()`:它如同一名外交官,请求键对应的值,若键不存在,可优雅地返回一个默认值。 ```python quantity = my_dict.get('pear', 0) # 如果 'pear' 不存在,返回 0 ``` • `setdefault()`:它不仅具备`get()`的功能,还能在键不存在时自动添加默认值到字典。 ```python my_dict.setdefault('pear', 2) # 如果 'pear' 不存在,添加键值对 'pear': 2 ``` ## 3.4 `update()`与合并字典 在字典的世界里,合并信息就像是一场友好的聚会,`update()`是这场聚会的组织者。 • `update()`:它能将另一个字典的键值对合并到当前字典中,如果有重叠的键,则后者覆盖前者。 ```python new_items = {'pear': 4, 'orange': 6} my_dict.update(new_items) # 合并 new_items 到 my_dict ``` 通过这些内置函数与方法的精妙运用,你便能更加自如地驾驭字典,无论是日常的数据处理还是复杂的逻辑构建,都能游刃有余。 # 第4章 字典进阶技巧 ## 4.1 字典推导式与生成器表达式 在`Python`中,字典推导式与生成器表达式是构建字典的高效工具,它们能简化代码,提升可读性。 • 字典推导式:它宛如魔法般将列表或其他可迭代对象转化为字典。形式上与列表推导式相似,只是将方括号`[ ]`替换为花括号`{ }`,且内部包含键值对表达式。 ```python words = ['apple', 'banana', 'cherry'] lengths_dict = {word: len(word) for word in words} # 生成 {'apple': 5, 'banana': 6, 'cherry': 6} ``` • 生成器表达式:对于大型数据集,字典生成器表达式提供了内存友好的替代方案。它与字典推导式语法相似,只是用圆括号`( )`包裹。生成器表达式返回一个可迭代对象,每次迭代返回一个键值对。 ```python words = ('apple', 'banana', 'cherry') lengths_gen = ({word: len(word)} for word in words) # 返回一个生成器对象 for pair in lengths_gen: print(pair) # 分别输出 {'apple': 5}, {'banana': 6}, {'cherry': 6} ``` ## 4.2 字典视图与键值对排序 字典视图和排序功能,让你能以不同的视角审视和组织字典内容。 • 字典视图:`keys()`, `values()`, `items()`方法返回的对象并非列表,而是视图对象。它们反映字典当前状态,且在字典更改时自动更新。视图支持大部分序列操作,如切片、成员测试等。 ```python my_dict = {'a': 1, 'b': 2, 'c': 3} key_view = my_dict.keys() print(list(key_view)) # 输出:['a', 'b', 'c'] my_dict['d'] = 4 # 添加新键值对 print(list(key_view)) # 输出:['a', 'b', 'c', 'd'] ``` • 键值对排序:虽然字典本身是无序的,但可以通过`sorted()`函数对键、值或键值对进行排序。结合`items()`方法,可以轻松得到有序的键值对列表。 ```python my_dict = {'banana': ¾, 'apple': ⅓, 'orange': ⅔} sorted_pairs = sorted(my_dict.items(), key=lambda x: x[1]) # 按值排序 print(sorted_pairs) # 输出:[('apple', ⅓), ('orange', ⅔), ('banana', ¾)] ``` ## 4.3 使用`defaultdict`与`Counter`提升效率 `Python`标准库提供了两个字典子类,`defaultdict`和`Counter`,它们专为特定场景设计,极大地提高了编码效率。 • `defaultdict`:当你期望字典在访问不存在的键时自动添加默认值,`defaultdict`就派上了用场。只需在创建时指定默认工厂函数。 ```python from collections import defaultdict counts = defaultdict(int) # 使用 int() 作为默认值工厂,返回 0 for fruit in ['apple', 'banana', 'apple']: counts[fruit] += 1 # 自动添加新键 ,无需检查是否存在 print(counts) # 输出:{'apple': 2, 'banana': 1} ``` • `Counter`:`Counter`类专用于计数任务,它是一个子类化自`dict`的容器,实现了计数统计功能。它可以轻松处理大量数据的频次统计。 ```python from collections import Counter fruits = ['apple', 'banana', 'apple', 'cherry', 'banana', 'banana'] fruit_counts = Counter(fruits) print(fruit_counts) # 输出:Counter({'banana': 3, 'apple': 2, 'cherry': 1}) ``` ## 4.4 字典与`JSON`数据互转 在数据交换或存储场景中,`JSON`格式广泛应用。`Python`提供了便捷的模块`json`用于字典与`JSON`字符串之间的转换。 • 字典转`JSON`:使用`json.dumps()`方法将字典编码为JSON字符串。 ```python import json data = {'name': 'Alice', 'age': 30, 'city': 'New York'} json_str = json.dumps(data) print(json_str) # 输出:'{"name": "Alice", "age": 30, "city": "New York"}' ``` • `JSON`转字典:对应地,`json.loads()`方法负责将JSON字符串解码回字典。 ```python json_str = '{"name": "Bob", "age": 35, "city": "San Francisco"}' loaded_data = json.loads(json_str) print(loaded_data) # 输出:{'name': 'Bob', 'age': 35, 'city': 'San Francisco'} ``` 掌握这些进阶技巧,你的字典操作技能将如虎添翼,无论面对何种复杂场景,都能游刃有余地处理字典相关的数据问题。 # 第5章 实战应用案例 ## 5.1 字典在数据分析中的应用 在数据分析的浩瀚星海中,字典是组织和解析数据的璀璨明星。例如,在处理调查问卷数据时,可以用字典来汇总各选项的投票次数。 ```python survey_results = { 'Yes': 42, 'No': 17, 'Maybe': 11 } # 计算总投票数 total_votes = sum(survey_results.values()) percentage_yes = (survey_results['Yes'] / total_votes) * 100 print(f"Yes占比: {percentage_yes:.2f}%") ``` ## 5.2 字典在网页爬虫中的应用 网络爬虫探索互联网的每一个角落,字典常被用来存储抓取的数据,便于后续分析。设想爬取一个博客网站的文章标题和链接。 ```python import requests from bs4 import BeautifulSoup blog_posts = {} response = requests.get("http://example.com/blog") soup = BeautifulSoup(response.text, 'html.parser') for post in soup.find_all('div', class_='post'): title = post.find('h2').text link = post.find('a')['href'] blog_posts[title] = link # 打印第一条文章的信息 first_post_title = next(iter(blog_posts)) print(f"文章标题: {first_post_title}, 链接: {blog_posts[first_post_title]}") ``` ## 5.3 字典在数据库查询结果处理中的应用 数据库查询结果通常以行和列的形式呈现,将这些结果转化为字典,便于进一步处理或展示。以`SQLite`数据库为例,查询用户信息并以字典形式存储。 ```python import sqlite3 conn = sqlite3.connect('users.db') cursor = conn.cursor() cursor.execute("SELECT id, username, email FROM users") rows = cursor.fetchall() # 将查询结果转换为字典列表 users_dict = [{column: row[i] for i, column in enumerate(cursor.description)} for row in rows] # 查看第一位用户的用户名 first_user = users_dict[0] print(f"第一位用户用户名: {first_user['username']}") ``` 这些实战案例展示了字典如何成为解决实际问题的利器,无论是在数据的海洋中航行,还是在信息的丛林里探索,字典都是不可或缺的导航图。 # 第6章 总结与思考 `Python`字典,作为一种键值对数据结构,以其独特的哈希表实现提供高效查找与操作。从创建、基本操作到内置函数与方法,再到进阶技巧与实战应用,全方位展现了其在数据分析、网页爬虫及数据库查询等领域的重要作用。与列表、元组等结构对比,字典以键唯一性实现精准访问,而`defaultdict`与`Counter`等扩展类进一步提升效率。在项目开发中,遵循最佳实践,如合理使用推导式、视图与排序,以及适时转换为`JSON`数据,可显著提升代码质量与可维护性。展望未来,`Python`字典将持续优化,引入新特性以适应不断变化的编程需求。
张泽楠
2024年6月16日 09:16
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码