本文介绍如何使用列表推导式高效提取嵌套字典中特定键(如 "code")在列表项中的所有值,适用于 dict → list → dict 的典型嵌套结构。
本文介绍如何使用列表推导式高效提取嵌套字典中特定键(如 "code")在列表项中的所有值,适用于 `dict → list → dict` 的典型嵌套结构。
在 Python 中,当数据以嵌套字典形式组织(例如配置、API 响应或 JSON 解析结果),常需从中批量提取某一层级的特定字段。以如下结构为例:
X = {
"privileges": [
{"ns": "", "set": "", "code": 0},
{"ns": "", "set": "", "code": 1},
{"ns": "", "set": "", "code": 3},
{"ns": "", "set": "", "code": 12},
{"ns": "", "set": "", "code": 14},
],
"whitelist": [],
"read_quota": 0,
"write_quota": 0,
}
目标是仅获取 privileges 列表中每个子字典的 "code" 值,并以纯数字列表形式返回:[0, 1, 3, 12, 14]。
最简洁、Pythonic 的方式是使用列表推导式:
codes = [item["code"] for item in X["privileges"]] print(*codes, sep="\n")
输出结果为:
0 1 3 12 14
✅ 优势说明:
- 无需导入额外模块(如 json);X 已是原生字典,json.loads() 仅用于解析 JSON 字符串,此处不适用;
- 时间复杂度为 O(n),一次遍历即可完成提取;
- 可读性强,语义清晰:「对 X["privileges"] 中每个 item,取其 "code" 键对应的值」。
⚠️ 注意事项:
- 若某些字典可能缺失 "code" 键,建议添加安全访问逻辑,避免 KeyError:
codes = [item.get("code") for item in X["privileges"]] # 返回 None(可进一步过滤) # 或更严谨地: codes = [item["code"] for item in X["privileges"] if "code" in item] - 确保 X["privileges"] 确实存在且为列表类型,必要时可先校验:
if isinstance(X.get("privileges"), list): codes = [item["code"] for item in X["privileges"]] else: raise ValueError("Expected 'privileges' to be a list")
总结:面对层级明确的嵌套结构,优先选用列表推导式而非循环或 map() —— 它兼具性能、可读性与简洁性,是 Python 数据提取的标准实践。











