飞翔飞翔
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • 学习路径
  • 第1章 Python简介

    • Python是什么
    • 安装与运行
    • 交互式解释器
    • 注释与编码规范
  • 第2章 变量与数据类型

    • 变量与对象
    • 整数 int
    • 浮点数 float
    • 复数 complex
    • 布尔值 bool
    • 字符串 str
    • 空值 None
    • 类型转换
  • 第3章 运算符与表达式

    • 算术运算符
    • 比较运算符
    • 赋值运算符
    • 逻辑运算符
    • 位运算符
    • 身份与成员运算符
    • 海象运算符
    • 运算符优先级
  • 第4章 流程控制

    • if 语句
    • if-else 语句
    • if-elif-else 语句
    • match-case 语句
    • 条件表达式(三元运算符)
    • while 循环
    • for 循环
    • range 函数
    • break 与 continue
    • 循环的 else 子句
    • pass 语句
  • 第5章 数据结构

    • 列表创建与索引
    • 列表方法
    • 列表推导式
    • 元组
    • 序列解包
    • 集合
    • 字典创建与访问
    • 字典方法
    • 字典推导式
    • range 对象
  • 第6章 函数

    • 定义函数
    • 位置参数与关键字参数
    • 默认参数
    • 可变参数
    • 解包实参
    • 函数返回值
    • lambda 表达式
    • 文档字符串与注解
    • 作用域与命名空间
    • global 与 nonlocal
  • 第7章 模块与包

    • 模块导入
    • 模块搜索路径
    • 包与相对导入
    • 标准库概览
  • 第8章 文件与输入输出

    • 文件读写
    • 上下文管理器
    • 字符串格式化
    • JSON 与 CSV
  • 第9章 面向对象

    • 类与对象
    • 方法
    • 实例变量与类变量
    • 私有变量
    • 继承
    • 多重继承
    • 魔术方法
    • 属性装饰器
    • 数据类 dataclass
  • 第10章 异常处理

    • 语法错误与异常
    • try-except
    • 异常链与 raise
    • 清理操作
    • 自定义异常
  • 第11章 迭代器与生成器

    • 迭代器协议
    • 生成器
    • 生成器表达式
    • 迭代工具
  • 第12章 高级特性

    • 装饰器
    • 函数式编程
  • 第13章 工程实践

    • 测试与调试
    • 代码质量
    • 虚拟环境

字典方法

字典对象提供了一系列方法来安全访问、批量更新和灵活遍历数据。

get:安全访问

d.get(key[, default]) 在键存在时返回值,不存在时返回 default(默认 None):

tel = {'jack': 4098, 'sape': 4139}
print(tel.get('jack'))        # 4098
print(tel.get('irv'))         # None,不报错
print(tel.get('irv', 0))      # 0,自定义默认值

get 只读不写,而 d[key] 在键不存在时会创建新键(仅在赋值语境下)。

setdefault:获取或设置

d.setdefault(key[, default]) 在键存在时返回值,不存在时插入并返回 default:

tel = {'jack': 4098}
print(tel.setdefault('jack', 0))   # 4098,键存在,默认值被忽略
print(tel.setdefault('irv', 4127)) # 4127,键不存在,插入并返回
tel                                  # {'jack': 4098, 'irv': 4127}

常用于分组统计:

data = [('a', 1), ('b', 2), ('a', 3)]
groups = {}
for key, val in data:
    groups.setdefault(key, []).append(val)
print(groups)   # {'a': [1, 3], 'b': [2]}

keys、values、items:动态视图

这三个方法分别返回字典键、值、键值对的视图对象。视图与字典动态绑定,修改后立即反映变化:

d = {'jack': 4098, 'sape': 4139}
keys = d.keys()
d['irv'] = 4127
print(keys)         # dict_keys([...'irv'])

视图支持集合运算:d1.keys() & d2.keys() 返回共同键,d1.keys() | d2.keys() 返回全部键。values() 不支持集合运算。

update:批量更新

d.update([other]) 将另一个字典或键值对可迭代对象合并到当前字典。键冲突时,传入的值覆盖原有值:

d = {'jack': 4098, 'sape': 4139}
d.update({'guido': 4127, 'jack': 9999})
print(d)   # {'jack': 9999, 'sape': 4139, 'guido': 4127}

也接受关键字参数和可迭代对象:d.update(irv=4127)、d.update(zip(['a','b'], [1,2]))。

Python 3.9+ 支持 | 合并运算符:d1 | d2 创建新字典,d1 |= d2 原地更新。

pop:删除并返回

d.pop(key[, default]) 删除指定键并返回值。键不存在时,有 default 则返回,否则抛出 KeyError:

d = {'jack': 4098, 'sape': 4139}
val = d.pop('jack')           # val = 4098
val = d.pop('irv', 'N/A')     # val = 'N/A',安全删除

clear 与 copy

clear() 移除所有键值对。copy() 返回浅拷贝:

d = {'a': [1, 2]}
d2 = d.copy()
d2['a'].append(3)
print(d['a'])        # [1, 2, 3],内部列表共享

需要完全独立时,使用 copy.deepcopy(d)。

fromkeys:类方法创建

dict.fromkeys(seq[, value]) 用序列元素作为键,所有键共享同一个默认值:

d = dict.fromkeys(['a', 'b', 'c'], 0)   # {'a': 0, 'b': 0, 'c': 0}
d = dict.fromkeys(['a', 'b'])          # {'a': None, 'b': None}

注意:默认值是可变对象时,所有键共享同一引用:

d = dict.fromkeys(['a', 'b'], [])
d['a'].append(1)
print(d)    # {'a': [1], 'b': [1]}

需要独立值时,使用字典推导式:{k: [] for k in ['a', 'b']}。

上一页
字典创建与访问
下一页
字典推导式