字典(Dictionary)

创建字典

# 方式1:使用花括号 {} 和键值对
dict1 = {"name": "Alice", "age": 20, "city": "Beijing"}

# 方式2:使用 dict() 构建函数,这种方式要求键是有效的标识符(通常是字符串)
dict2 = dict(name="Alice", age=20, city="Beijing")

# 方式3:使用键值对的序列(如列表或元组)
dict3 = dict([("name", "Alice"), ("age", 20), ("city", "Beijing")])
dict4 = dict(zip(["name", "age", "city"], ["Alice", 20, "Beijing"]))

# 方式4:创建空字典
empty_dict1 = {}
empty_dict2 = dict()

方法
作用

dict[key]

获取键对应的值,键不存在则抛 KeyError

dict.get()

获取键对应的值,键不存在则返回默认值(默认值省略则返回 None

dict.keys()

返回所有键的视图对象(可迭代)

dict.values()

返回所有值的视图对象(可迭代)

dict.items()

返回所有键值对的视图对象(每个元素是 (键,值) 元组,可迭代)

方法
作用

del dict[key]

删除指定键值对,键不存在则抛 KeyError

dict.pop()

删除指定键值对并返回对应值,键不存在则返回默认值(无默认值则抛错)

dict.popitem()

删除并返回最后插入的键值对(Python 3.7+ 有序),空字典抛 KeyError

dict.clear()

清空字典所有键值对,字典变为空

增/改

方法
作用

dict[key] = value

新增键值对(键不存在)或修改值(键已存在)

dict.update()

批量添加 / 修改键值对,参数可以是字典、包含双元素的列表 / 元组等

dict.setdefault()

若键不存在,新增键值对(值为默认值);若存在,返回原有值(不修改)

遍历/转换

方法
作用

dict.copy()

返回字典的浅拷贝(新字典,修改新字典不影响原字典,嵌套结构除外)

dict.fromkeys()

类方法,创建新字典:以可迭代对象元素为键,所有键的默认值相同(默认 None

字典推导式

替代 for 循环 +update(),简洁高效地创建或筛选字典。

字典深拷贝

原生 dict.copy() 是浅拷贝,嵌套可变对象(如列表、字典)修改会互相影响,需用 copy 模块的 deepcopy

字典解包:函数参数/批量赋值

** 解包字典为关键字参数,或用 items() 批量赋值。

字典比较与排序

原生字典可直接用==比较(键值对完全相同则相等),排序需结合sorted()

内置模块

collections 模块

Python 内置的 collections 模块提供了多个「增强版字典」,解决原生字典的痛点(如默认值、有序、计数等)。

扩展类型 / 方法
作用

collections.defaultdict

带默认值的字典:访问不存在的键时,自动创建并赋予指定默认值(无需频繁用 get()

collections.OrderedDict

有序字典(Python 3.7+ 原生字典已有序,但它提供额外排序 / 移动方法)

collections.Counter

计数字典:专门用于统计可哈希对象的出现次数(键是元素,值是次数)

collections.ChainMap

链式字典:将多个字典合并为一个视图,查询时按顺序遍历字典(不复制数据)

operator 模块

operator 模块提供了便捷的字典操作函数,替代 lambda 表达式,更高效且易读。

方法
作用

operator.itemgetter(key)

创建函数,用于快速获取字典的指定键值(常用于排序)

operator.attrgetter

(间接)若字典值是对象,可快速获取对象属性

第三方库扩展

  • json:字典与 JSON 字符串互转(网络传输/文件存储);

  • pandas:将字典转为 DataFrame(数据分析场景);

  • deepdiff:对比两个字典的差异(如接口返回值校验)

  • ruamel.yaml:字典与 YAML 格式互转(配置文件场景);

最后更新于