首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第4章 选择易懂的名称
4.1 命名风格
4.2 PEP 8 的命名风格
4.3 适当的名称长度
4.3.1 太短的名称
4.3.2 太长的名称
4.4 起易于搜索的名称
4.5 避免笑话、双关语和需要文化背景才能理解的词汇
4.6 不要覆盖内置名称
4.7 史上最差的变量名
第5章 揪出代码的坏味道
5.1 重复的代码
5.2 魔数
5.3 注释掉的代码和死代码
5.4 打印调试
5.5 带有数字后缀的变量
5.6 本该是函数或者模块的类
5.7 嵌套列表解析式
5.8 空的except块和糟糕的错误信息
5.9 代码坏味道的谬误
5.9.1 谬误:函数应该仅在末尾处有一个return语句
5.9.2 谬误:函数最多只能有一个try语句
5.9.3 谬误:使用flag参数不好
5.9.4 谬误:全局变量不好
5.9.5 谬误:注释是不必要的
第6章 编写Python 风格的代码
6.1 Python 之禅
6.2 学着喜欢强制缩进
6.3 使用timeit模块衡量性能
6.4 常被误用的语法
6.4.1 使用enumerate()而不是range()
6.4.2 使用with 语句代替open()和close()
6.4.3 用is 跟None 做比较而不用==
6.5 格式化字符串
6.5.1 如果字符串有很多反斜杠,请使用原始字符串
6.5.2 使用f-string 格式化字符串
6.6 制作列表的浅副本
6.7 以Python 风格使用字典
6.7.1 在字典中使用get()和setdefault()
6.7.2 使用collections.defaultdict()设置默认值
6.7.3 使用字典代替switch 语句
6.8 条件表达式:Python“丑陋”的三元运算符
6.9 处理变量的值
6.9.1 链式赋值和比较运算符
6.9.2 验证变量是否为多个值中的一个
当前位置:
首页>>
技术小册>>
Python编程轻松进阶(二)
小册名称:Python编程轻松进阶(二)
### 6.7 以Python风格使用字典 在Python中,字典(Dictionary)是一种内置的数据结构,它以键值对(key-value pairs)的形式存储数据,其中每个键都是唯一的,且与一个值相关联。这种数据结构不仅使得数据查找、插入和删除操作非常高效,还因为其灵活性和表达力而成为Python编程中的核心组件之一。本章将深入探讨如何以Python风格高效、优雅地使用字典,包括其基本操作、高级特性以及在实际编程中的最佳实践。 #### 6.7.1 字典基础 ##### 创建字典 在Python中,字典可以使用花括号`{}`来创建,里面包含一系列由逗号分隔的键值对,每对键值之间用冒号`:`分隔。例如: ```python person = {'name': 'Alice', 'age': 30, 'city': 'New York'} ``` ##### 访问字典元素 通过键来访问字典中的值非常直接。如果键存在,则返回对应的值;如果不存在,Python会抛出一个`KeyError`。为了避免这种情况,可以使用`get()`方法,它允许你指定一个默认值作为找不到键时的返回值: ```python print(person['name']) # Alice print(person.get('job', 'Unknown')) # Unknown ``` ##### 更新和删除元素 向字典中添加或更新键值对很简单,只需直接赋值即可。要删除字典中的元素,可以使用`del`语句或`pop()`方法: ```python person['job'] = 'Engineer' # 更新 del person['city'] # 删除 print(person.pop('age', None)) # 删除并返回'age'的值,如果不存在则返回None ``` #### 6.7.2 字典的高级特性 ##### 字典推导式 字典推导式是Python中一种简洁且强大的工具,用于从其他数据结构(如列表、元组或另一个字典)创建字典。它遵循与列表推导式相似的语法,但结果是一个字典: ```python squares = {x: x**2 for x in range(6)} # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25} # 使用条件表达式 even_squares = {x: x**2 for x in range(6) if x % 2 == 0} # {0: 0, 2: 4, 4: 16} ``` ##### 字典的`items()`, `keys()`, 和 `values()` 方法 这三个方法分别返回字典的视图对象,这些对象分别代表字典中的项(键值对)、键和值。这些视图对象支持迭代,但不支持索引操作: ```python for key, value in person.items(): print(f"{key}: {value}") # 直接迭代键或值 for key in person.keys(): print(key) for value in person.values(): print(value) ``` ##### 字典的排序 虽然字典本身是无序的(在Python 3.7+中,字典保持插入顺序),但你可以通过将其`items()`转换为列表并使用`sorted()`函数来对其进行排序。排序后的结果可以重新组装成字典或仅用于迭代: ```python sorted_items = sorted(person.items(), key=lambda x: x[1]) # 按值排序 sorted_dict = dict(sorted_items) for key, value in sorted_dict.items(): print(f"{key}: {value}") ``` #### 6.7.3 Python风格的字典应用 ##### 使用字典存储配置信息 字典非常适合用作配置信息的容器,因为它允许你以键值对的形式组织数据,便于访问和修改: ```python config = { 'database': {'host': 'localhost', 'port': 3306, 'user': 'root'}, 'logging': {'level': 'INFO', 'file': 'app.log'} } # 访问配置 print(config['database']['host']) # localhost ``` ##### 映射和过滤数据 字典推导式可以优雅地用于映射(转换)和过滤(选择)字典中的数据。例如,你可能想从一个包含员工信息的字典列表中提取特定属性的新字典列表: ```python employees = [ {'name': 'Alice', 'role': 'Engineer', 'salary': 70000}, {'name': 'Bob', 'role': 'Manager', 'salary': 90000} ] engineers = {emp['name']: emp['salary'] for emp in employees if emp['role'] == 'Engineer'} # {'Alice': 70000} ``` ##### 字典作为默认参数 在定义函数时,字典可以作为默认参数使用,但需注意不要在函数内部修改默认字典的值,因为这将影响到所有后续对该函数的调用。如果需要修改,应在函数内部创建一个新字典: ```python def update_inventory(item, quantity, inventory={}): if item in inventory: inventory[item] += quantity else: inventory[item] = quantity return inventory # 更安全的做法 def update_inventory_safe(item, quantity, inventory=None): if inventory is None: inventory = {} # 更新逻辑同上 ``` #### 6.7.4 最佳实践 - **保持键的唯一性**:确保字典中的键是唯一的,因为每个键都映射到一个唯一的值。 - **使用有意义和一致的键名**:选择清晰、描述性强的键名,以提高代码的可读性。 - **考虑使用不可变类型作为键**:虽然Python允许使用可变类型(如列表或集合)作为键,但这样做可能导致难以预测的行为。通常,使用不可变类型(如字符串、整数、元组)作为键是更安全的选择。 - **避免在循环中修改字典大小**:虽然Python的字典实现足够智能,可以在某些情况下处理这种情况,但在循环中增加或删除大量项时仍可能导致性能问题。 - **利用Python的内建函数和方法**:如`dict.get()`, `dict.pop()`, `sorted()`, 字典推导式等,它们可以大大简化代码并提高效率。 通过遵循这些原则和最佳实践,你可以以Python风格高效、优雅地使用字典,从而编写出既清晰又强大的代码。
上一篇:
6.6 制作列表的浅副本
下一篇:
6.7.1 在字典中使用get()和setdefault()
该分类下的相关小册推荐:
Python编程轻松进阶(一)
剑指Python(万变不离其宗)
Python合辑1-Python语言基础
Python3网络爬虫开发实战(下)
Python编程轻松进阶(三)
Python合辑7-集合、列表与元组
Python与办公-玩转PDF
Python数据分析与挖掘实战(下)
Python合辑2-字符串常用方法
Python与办公-玩转Excel
Python甚础Django与爬虫
Python机器学习实战