小ᶻ☡꙳ᵃⁱᵍᶜ꙳ 2024-09-26 17:39 采纳率: 100%
浏览 17
已结题

在处理嵌套结构时,如何将一个嵌套字典扁平化

在处理嵌套结构时,如何将一个嵌套字典扁平化?假设有一个包含多层嵌套的字典,每一层嵌套都有多个键值对。你需要设计一个方案,将所有嵌套的键合并为一个以点号 . 分隔的单一键,使最终结果为一个“扁平化”的字典。

每个嵌套字典的键要按照路径用 . 连接在一起。
处理多层嵌套的情况,确保所有嵌套的键值对都被转换为扁平化结构。
字典的值可以是整数、字符串或其他字典,非字典值直接作为最终结果中的键值对。

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-26 17:40
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    为了实现这个功能,我们可以编写一个Python函数,它接受一个嵌套字典作为输入,并返回一个扁平化的版本。我们将使用递归方法来遍历整个字典,然后根据其键构建一个新的扁平化字典。

    def flatten_dict(d, parent_key='', sep='.'):
        items = []
        for k, v in d.items():
            new_key = f"{parent_key}{sep}{k}" if parent_key else k
            if isinstance(v, dict):
                items.extend(flatten_dict(v, new_key, sep=sep).items())
            else:
                items.append((new_key, v))
        return dict(items)
    
    # 示例使用
    nested_dict = {
        "a": 1,
        "b": {"c": 2, "d": {"e": 3}},
        "f": [{"g": 4}, {"h": 5}]
    }
    
    flat_dict = flatten_dict(nested_dict)
    print(flat_dict)  # 输出: {'a': 1, 'b.c': 2, 'b.d.e': 3, 'f.0.g': 4, 'f.1.h': 5}
    

    在这个解决方案中:

    • flatten_dict 函数接收两个参数:一个字典(d)和一个可选的 parent_keysep 参数。
    • 使用 items() 方法获取字典的所有键值对。
    • 如果当前项是一个字典,我们调用自身(递归调用),并将新的键值对添加到结果列表中。
    • 如果当前项不是一个字典,我们将其添加到结果列表中,其中新的键值对由 parent_key 和当前键组成。

    这种方法能够正确处理任意深度的嵌套字典,并且输出的是一个按路径连接的键值对的扁平化字典。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月28日
  • 已采纳回答 9月28日
  • 创建了问题 9月26日