如何用 4 种不同方法展平 Python 字典?

2025年3月4日 | 阅读 3 分钟

以下教程将指导您了解在 Python 编程语言中展平字典的不同方法。

Python 字典简介

Python 字典是另一种原生数据类型,用于存储键值映射,其中所有键必须是唯一的。列表是动态的,这意味着在创建后仍然可以通过添加、删除或修改元素来更改它们。它们使用花括号 `{}` 定义,每个键通过冒号 `:` 与其值配对。

示例

字典的一些关键特性

  1. 无序:Python 字典不维护元素的顺序(尽管 Python 3.7+ 仍将插入顺序作为实现细节保留)。
  2. 键:必须是不可变的(例如,字符串、数字、元组)。
  3. 值:可以是任何数据类型。

字典的一些常见操作

  1. 访问值:`my_dict["name"]` 返回 `"Alice"`。
  2. 添加/更新:`my_dict["age"] = 31`。
  3. 删除:`del my_dict["city"]`。

展平字典是什么意思?

展平字典意味着将嵌套字典转换为单层字典,其中键指向原始字典中的值。在展平的字典中,嵌套字典中的键被合并为一个键,通常使用分隔符(如下划线 `_` 或点 `.`)来指示原始结构。

示例

以下代码片段将演示嵌套字典和展平字典之间的区别。

嵌套字典

展平字典

目的

展平字典通常是为了简化结构,使其在数据处理、导出到 CSV 或 JSON 格式等场景中更容易使用,或者当你需要直接访问嵌套值而无需导航多层时。

展平 Python 字典的不同方法

在下一节中,我们将讨论一些展平 Python 字典的方法/途径。

方法 1:使用递归

此方法涉及递归遍历字典。如果值为另一个字典,则函数会使用嵌套字典再次调用自身,并使用分隔符(如 `_`)将父键附加到子键。

示例

输出

 
{'a':1,'b_c':2,'b_d_e':3}   

方法 2:使用迭代方法

此方法使用堆栈(或列表)迭代处理每个键值对。如果值为字典,则会将当前路径和值推送到堆栈。这避免了递归,并且在某些情况下可能更有效。

示例

输出

 
{'a':1,'b_c':2,'b_d_e':3}   

方法 3:使用 `pandas` 库

pandas 库提供了 `json_normalize` 函数,可以展平嵌套字典。这在处理复杂的嵌套结构时特别有用,因为 pandas 在内部处理了大部分工作。

示例

输出

 
{'a':1,'b_c':2,'b_d_e':3}   

方法 4:使用 `json` 和 `collections` 库

此方法涉及使用 `json` 操作字典结构,并使用 collections 来处理展平。对于处理更复杂的嵌套字典,这是一种健壮的方法。

示例

输出

 
{'a':1,'b_c':2,'b_d_e':3}