递归替换字典中的字符

2024-03-01

如何更改所有点.下划线(在字典的键中),给定一个任意嵌套的字典?

我尝试的是编写两个循环,但随后我将仅限于两级嵌套字典。

This ...

{
    "brown.muffins": 5,
    "green.pear": 4,
    "delicious.apples": {
        "green.apples": 2
    {
}

...应该变成:

{
    "brown_muffins": 5,
    "green_pear": 4,
    "delicious_apples": {
        "green_apples": 2
    {
}

有优雅的方法吗?


你可以写一个递归函数,像这样

from collections.abc import Mapping
def rec_key_replace(obj):
    if isinstance(obj, Mapping):
        return {key.replace('.', '_'): rec_key_replace(val) for key, val in obj.items()}
    return obj

当您使用问题中显示的字典调用此字典时,您将获得一本新字典,其中键中的点替换为_s

{'delicious_apples': {'green_apples': 2}, 'green_pear': 4, 'brown_muffins': 5}

解释

这里,我们只是检查当前对象是否是一个实例dict如果是,那么我们迭代字典,替换键并递归调用该函数。如果它实际上不是字典,则按原样返回。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

递归替换字典中的字符 的相关文章

  • Json.dump 失败并显示“必须是 unicode,而不是 str”TypeError

    我有一个 json 文件 其中恰好有大量中文和日文 以及其他语言 字符 我将其加载到我的 python 2 7 脚本中使用io open如下 with io open multiIdName json encoding utf 8 as j
  • Huggingface 变形金刚模块未被 anaconda 识别

    我正在使用 Anaconda python 3 7 Windows 10 我尝试通过安装变压器https huggingface co transformers https huggingface co transformers 在我的环境
  • TCP打孔问题

    我尝试使用 Python 3 中概述的原则为防火墙编写一个基本的 TCP 打孔器本文 http www bford info pub net p2pnat index html 不过 我无法连接任何东西 这是代码 usr bin pytho
  • Python实时读取串口数据

    我正在使用 Python 中的脚本通过串行端口以 2Mbps 的速度从 PIC 微控制器收集数据 PIC 在 2Mbps 下完美定时工作 FTDI USB 串行端口在 2Mbps 下工作也很好 均通过示波器验证 我每秒发送消息 大小约为 1
  • 根据 R 中的字符串模式选择行

    假设我有以下数据 df lt data frame name c TO for Turnover for people HC people Hello world beenie man apple pears TO is number c
  • Python,将字典存储在数据库中

    在数据库中存储和检索 python 字典的最佳方法是什么 如果您对使用传统 SQL 数据库 例如 MySQL 不是特别感兴趣 您可以研究非结构化文档数据库 其中文档自然映射到 python 字典 例如MongoDB http www mon
  • 使用pip安装pylibmc时出错

    您好 当我尝试使用 pip 在 OSX Lion 上安装 pylibmc 时 出现以下错误 pylibmcmodule h 42 10 fatal error libmemcached memcached h file not found
  • 使用 Python 将阿拉伯语或任何从右到左书写系统的字符串打印到 Linux 终端

    非常简单的例子是 city print city 我期望输出是 但实际上输出是相反的字符串 字母看起来有点不同 因为它们有开始 中间和结束形式 我无法将其粘贴到此处 因为复制粘贴会再次更正字符串的顺序 如何在 Linux 终端上正确打印阿拉
  • 如何将嵌套的Python字典转换为简单的命名空间?

    假设我有一个深度为 N 的嵌套字典 如何将每个内部嵌套字典转换为简单的命名空间 example input key0a test key0b key1a key2a keyNx key2b test key1b test example o
  • C++:字符串流有什么好处?

    谁能告诉我一些在 C 中使用字符串流的实际例子 即使用流插入和流提取运算符输入和输出到字符串流 您可以使用字符串流来转换任何实现operator lt lt 到一个字符串 include
  • 如何使用appium自动化Android手机后退按钮

    我正在使用 Appium python 客户端库 对 Android 上的混合移动应用程序进行测试自动化 我无法找到任何方法来自动化或创建手势以使用 电话后退 按钮返回到应用程序的上一页 有没有可以使用的驱动函数 我尝试了 self dri
  • Pygooglevoice登录错误

    另一个人问了这个问题 但没有回复 所以我再问一遍 我正在尝试使用 pygooglevoice API 但是当我运行 SMS py 示例脚本时 它给了我一个登录错误 我已经安装了 Enthought python 我想也许我还需要安装其他东西
  • pandas-更改重采样时间序列的开始和结束日期

    我有一个时间序列 我将其重新采样到这个数据框中df 我的数据是从6月6日到6月28日 它希望将数据从6月1日延长到6月30日 计数列仅在较长时间内具有 0 值 而我的实际值是从 6 日到 28 日 Out 123 count Timesta
  • 如何在 matplotlib 中第一个 x 轴的底部添加第二个 x 轴?

    我指的是已经提出的问题here https stackoverflow com questions 10514315 how to add a second x axis in matplotlib 在此示例中 用户通过将第二个轴添加到与标
  • 执行许多插入重复键更新错误:未使用所有参数

    所以我一直在尝试使用 python 2 7 15 使用 mysql connector 执行此查询 但由于某种原因 它似乎不起作用并且总是返回错误 并非所有参数都被使用 表更新有一个主键 即 ID 这是我尝试运行此 SQL 的查询 sql
  • Python 包安装:pip 与 yum,还是两者一起安装?

    我刚刚开始管理 Hadoop 集群 我们使用 Bright Cluster Manager 直至操作系统级别 CentOS 7 1 然后使用 Ambari 以及适用于 Hadoop 的 Hortonworks HDP 2 3 我不断收到安装
  • Python 中的颜色处理

    对于我的聚类 GUI 我目前对聚类使用随机颜色 因为我事先不知道最终会得到多少个聚类 在 Python 中 这看起来像 import random def randomColor return random random random ra
  • PyMC3 和 Theano - 导入 pymc3 后,有效的 Theano 代码停止工作

    一些简单的 theano 代码可以完美运行 当我导入 pymc3 时停止工作 这里有一些片段可以重现错误 Initial Theano Code this works import theano tensor as tsr x tsr ds
  • 混合两个列表的Pythonic方法[重复]

    这个问题在这里已经有答案了 我有两个长度为 n 和 n 1 的列表 a 1 a 2 a n b 1 b 2 b n 1 我想要一个函数作为结果给出一个列表 其中包含两个中的替代元素 即 b 1 a 1 b n a n b n 1 以下方法有
  • 重新安装后使用 pandas dataframes 时出现问题

    我已经重新安装了 Python 和 Anaconda 现在面临以下问题 在我将 pkl 文件加载到数据帧并尝试 查看 该文件后 如下所示 df pd read pickle example pkl df 我收到错误 AttributeErr

随机推荐

  • “可能会损失精度”是 Java 发疯了还是我遗漏了一些东西?

    AFAIK 当我不应该出现 精度损失 错误时 我却收到了 精度损失 错误 这是一个实例变量 byte move 0 这发生在此类的方法中 this move this move lt lt 4 byte Guy moven indexOf
  • 将 Unicode Emoji 正确读入 R

    我有一组来自 Facebook 的评论 通过 Sprinkr 等系统拉取 其中包含文本和表情符号 我尝试在 R 中对它们进行各种分析 但在正确提取表情符号字符方面遇到了困难 例如 我有一个 csv 以 UTF 8 编码 其消息行包含如下内容
  • 如何使用asp.net core blazor web assembly显示google adsense广告

    我有一个在 blazor 上运行的项目 我想在 blazor 上添加 google adsense 广告 但我找不到任何在 blazor 上运行 google 广告的解决方案 请帮我设置广告 看看这个视频 https www youtube
  • mkdir() 说没有这样的目录并失败?

    我可能做了一些非常简单的错误 但是当我尝试创建一个目录 使用刚刚执行的插入变量作为最后一个文件夹名称 时 我收到错误 警告 mkdir function mkdir home blah blah 中没有这样的文件或目录 与代码 if is
  • gdb:无法找到新线程:系统更新后出现一般错误

    我正在 ARM 板上运行基于 OpenEmbedded 的 Linux 我的应用程序正在其中运行 我曾经运行内核 2 6 35 gdb 6 8 和 gcc 4 3 最近我将系统更新到内核2 6 37 gdb 7 4 也尝试过7 3 和gcc
  • 如何在 Visual Studio Code 中创建多个光标

    在 VS Code 中创建多个光标的键盘快捷键是什么 Press Alt and click This works on Windows and Linux and it should work on Mac too Visual Stud
  • lambda 和成员函数指针的区别

    在我的回答中here https stackoverflow com a 74078452 11998382 巴里指出最好打电话views transform Planter getPlants 因为views transform Plan
  • 派生 Serde 的 Serialize 或 Deserialize 强制泛型类型可序列化,尽管它不需要

    My type A 它可以包含任何实现trait Trait 是可序列化的 尽管实现该特征的类型Trait也许不是 就我而言 它不可能 它是一个私有非对称密钥 extern crate serde macro use extern crat
  • 梯度下降和牛顿梯度下降有什么区别?

    我明白梯度下降的作用 基本上 它试图通过缓慢地沿着曲线移动来走向局部最优解 我想了解普通梯度下降法和牛顿法之间的实际区别是什么 我从维基百科上读到了这样一句话 牛顿方法使用曲率信息来采取更直接的路线 这直观上意味着什么 在局部最小值 或最大
  • 如何在 Java 中将 long 变量更改为时间戳?

    如何将长整型变量更改为时间戳变量 我可以将其转换为字符串 但我需要将其转换为时间戳才能在数据库中使用它 Timestamp 扩展了 java util Date 并且它有一个接受 long 的构造函数 像这样 import java sql
  • 如何在android中注册低电量广播接收器?

    我想注册低电量广播 如果电池状态达到某种程度 我想收到警报 如果您有任何想法请帮助我 您需要注册一个BroadcastReceiver for ACTION BATTERY LOW http developer android com re
  • Mathematica:未评估、延迟、保留、HoldForm、HoldAllComplete、等等

    我对所有旨在以某种方式阻止评估的内置 Mathematica 函数感到困惑 Unevaluated Defer Hold 以及超过六种形式Hold Mathematica 文档只是单独解释每个函数 而没有解释为什么选择其中一个函数 谁能对所
  • 在 ECMA 第 3 阶段使用提案在统计上是否安全?

    背景 我指的是 操作员 许多人喜欢并支持执行以下操作的想法 const obj hello 1 const obj2 world 2 obj Problem 与典型的语法相比 我个人更喜欢这种语法Object assign但最近当我开始在我
  • 如何使用 jQuery .ajax 来执行我的表单操作

    我改变了 php 和 jQuery 的编码风格 但是我的注册 reg form company bind submit function fancybox showActivity ajax type POST cache false ur
  • jQuery:调用后更改插件选项

    我自己制作了一个插件 用于在使用 jquery ui 对话框时设置一些东西 而不是调用 popup dialog options 我用这个 popup dialogPlugin options 并且dialogPlugin会调用 dialo
  • 将存储过程输入参数分配给局部变量是否有助于优化查询?

    我有一个需要 5 个输入参数的存储过程 该过程有点复杂 大约需要 2 分钟才能执行 我正在优化查询 所以 我的问题是 将输入参数分配给局部变量然后在过程中使用局部变量是否总是有帮助 如果是这样 它有什么帮助 我不会尝试解释参数嗅探的完整细节
  • 在 Go 中实现 Merkle 树数据结构

    我目前正在尝试在 Go 中实现默克尔树数据结构 基本上 我的最终目标是存储一小组结构化数据 最大 10MB 并允许该 数据库 轻松与分布在网络上的其他节点同步 请参阅相关资料 我已经在 Node 中相当有效地实现了这一点 因为没有类型检查
  • 访问 iPhone 地址簿中的人员信息

    我需要让用户有机会从地址簿中选择电话号码 所以我以苹果手册为例 但它只需要第一个号码 我如何让用户可以选择地址簿中的一个号码 IBAction adressBook UIButton sender ABPeoplePickerNavigat
  • 如何防止 CSS 渲染阻止我的网站?

    我正在尝试优化移动网页的加载速度 为此我正在使用该网站 https developers google com speed pagespeed insights https developers google com speed pages
  • 递归替换字典中的字符

    如何更改所有点 下划线 在字典的键中 给定一个任意嵌套的字典 我尝试的是编写两个循环 但随后我将仅限于两级嵌套字典 This brown muffins 5 green pear 4 delicious apples green apple