将嵌套字典中的所有键从camelCase转换为snake_case

2024-05-12

我有一本类似这样的字典:

{
     'firstName': 'abc',
     'lastName': 'xyz',
     'favoriteMovies': ['Star Wars', 'The lone ranger'],
     'favoriteCountries': [
          {'country': 'China', 'capitalCity': 'Beiging'},
          {'country': 'India', 'capitalCity': 'New Delhi'}
     ]
}

我想将其转换为snake_case,如下所示

{
    'first_name': 'abc',
    'last_name': 'xyz',
    'favorite_movies': ['Star Wars', 'The lone ranger'],
    'favorite_countries': [
        {'country': 'China', 'capital_city': 'Beiging'},
        {'country': 'India', 'capital_city': 'New Delhi'}
     ]
}  

字典可以是任何长度深度。

我目前的解决方案是

import re

def convert_snake_case_to_camel_case(data):
    required_dict = {}

    for key, value in data.items():
        if type(value) == str:
            new_key = re.sub("([a-z0-9])([A-Z])", r"\1_\2", key).lower()
            required_dict[new_key] = value
        elif type(value) == list and all(list(map(lambda _: isinstance(_, str), value))):
            new_key = re.sub("([a-z0-9])([A-Z])", r"\1_\2", key).lower()
            required_dict[new_key] = value
        elif type(value) == list and all(list(map(lambda _: isinstance(_, dict), value))):
            new_key = re.sub("([a-z0-9])([A-Z])", r"\1_\2", key).lower()
            required_dict[new_key] = list(filter(convert_snake_case_to_camel_case, value))
    return required_dict

但我没有得到嵌套数据的预期结果。


短递归版本:

import re
def to_snake(s):
  return re.sub('([A-Z]\w+$)', '_\\1', s).lower()

def t_dict(d):
   if isinstance(d, list):
      return [t_dict(i) if isinstance(i, (dict, list)) else i for i in d]
   return {to_snake(a):t_dict(b) if isinstance(b, (dict, list)) else b for a, b in d.items()}

data = {'firstName': 'abc', 'lastName': 'xyz', 'favoriteMovies': ['Star Wars', 'The lone ranger'], 'favoriteCountries': [{'country': 'China', 'capitalCity': 'Beiging'}, {'country': 'India', 'capitalCity': 'New Delhi'}]} 
print(t_dict(data))

Output:

{'first_name': 'abc', 'last_name': 'xyz', 
 'favorite_movies': ['Star Wars', 'The lone ranger'], 
 'favorite_countries': [
    {'country': 'China', 'capital_city': 'Beiging'}, 
    {'country': 'India', 'capital_city': 'New Delhi'}
  ]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将嵌套字典中的所有键从camelCase转换为snake_case 的相关文章

  • 函数名称未定义

    我有一段代码 看起来像这样 if name main main def main print hello 但是 当我尝试运行此代码时 出现错误 NameError 名称 main 未定义 我是否没有在函数 def main 的第一行定义名称
  • 按每个元素中出现的数字对字符串列表进行排序[重复]

    这个问题在这里已经有答案了 我有一个脚本 其目的是对不断下载到服务器上的空间数据集文件进行排序和处理 我的列表目前大致如下 list file t00Z wrff02 grib2 file t00Z wrff03 grib2 file t0
  • 学习Python中的解析器

    我记得我读过有关解析器的内容 您只需提供一些示例行 它就知道如何解析某些文本 它只是确定两条线之间的差异 以了解可变部分是什么 我以为它是用 python 写的 但我不确定 有谁知道那是什么图书馆吗 可能你的意思是模板制作器 http co
  • virtualenvwrapper 函数在 shell 脚本中不可用

    所以 我再一次制作了一个很棒的 python 程序 它让我的生活变得更加轻松 并节省了大量时间 当然 这涉及到一个 virtualenv 用mkvirtualenvvirtualenvwrapper 的功能 该项目有一个requiremen
  • java中的散列是如何工作的?

    我正在尝试弄清楚java中的哈希值 例如 如果我想在哈希图中存储一些数据 它是否会有某种带有哈希值的底层哈希表 或者 如果有人能够对哈希的工作原理给出一个很好且简单的解释 我将非常感激 HashMap 基本上在内部实现为数组Entry 如果
  • 有向无环图的拓扑排序为阶段

    是否有一种算法 给定一个未加权的有向无环图 将所有节点排序到节点集列表中 使得 拓扑顺序被保留 即 对于所有边u gt v v出现在列表中更靠下的集合中u and 列表的长度是最小的 这个问题有名字吗 Example 下图的一种可能的排序是
  • 在 python 中发送标头[重复]

    这个问题在这里已经有答案了 我有以下 python 脚本 我想发送 假 标头信息 以便我的应用程序就像 Firefox 一样运行 我怎么能这么做呢 import urllib urllib2 cookielib username passw
  • DataFrame.loc 的“索引器太多”

    我读了关于切片器的文档 http pandas pydata org pandas docs stable advanced html using slicers一百万次 但我从来没有理解过它 所以我仍在试图弄清楚如何使用loc切片Data
  • lmfit模型拟合然后预测

    我正在领养lmfit进行曲线拟合并使用拟合模型进行预测 然而下面的代码并没有达到我想要的效果 能否请你帮忙 谢谢 import numpy as np from lmfit import Model def linearModel x a0
  • argparse 不检查位置参数

    我正在创建一个脚本 它使用 argparse 接受位置参数和可选参数 我已经阅读了 Doug 的教程和 python 文档 但找不到答案 parser argparse ArgumentParser description script t
  • 尝试校准keras模型

    我正在尝试通过 Sklearn 实现来校准我的 CNN 模型CalibratedClassifierCV 尝试将其包装为KerasClassifier并覆盖预测功能但没有成功 有人可以说我做错了什么吗 这是模型代码 def create m
  • 当元组列表中相同项目的值是字符串时,对它们的值求和

    如果我有这样的元组列表 my list books 5 books 10 ink 20 paper 15 paper 20 paper 15 我怎样才能把列表变成这样 books 15 ink 20 paper 50 即添加同一项目的费用
  • Pandas 中每列的曲线拟合 + 外推值

    我有一个包含大约 300 列的数据集 每一列都与深度相关 Pandas DataFrame 的简化版本看起来像这样 import matplotlib pyplot as plt import numpy as np import pand
  • Kivy TextInput 水平和垂直对齐(文本居中)

    如何在 Kivy 的 TextInput 中水平居中文本 I have the following screen But I want to centralize my text like this 这是我的 kv 语言的一部分 BoxLa
  • 增强迪基-富勒测试中的 BIC 在 Python 中到底是如何工作的?

    这个问题是关于 statsmodels tsa stattools python 库 adfuller 中的增强迪基 富勒测试实现 原则上 AIC 和 BIC 应该计算一组可用模型的信息标准 并选择最好的模型 信息损失最低的模型 但它们在增
  • 动态前缀和

    是否有任何数据结构能够返回数组的前缀和 1 更新元素以及向数组插入 删除元素 所有这些都在 O log n 内 1 前缀和 是从第一个元素到给定索引的所有元素的总和 例如 给定非负整数数组8 1 10 7前三个元素的前缀和是19 8 1 1
  • 本地主机上的 Google App Engine GQL 查询

    我正在 Google App Engine Windows 上的 SDK 版本 1 7 0 上开发一个应用程序 我需要经常测试该应用程序 并且此测试涉及数据存储上的大量 GQL 查询 您可以在 App Engine 管理界面的浏览器中在线运
  • 如何使用 python 模块的多个 git 分支?

    我想使用 git 来同时处理我正在编写的模块中的多个功能 我目前正在使用 SVN 只有一个工作区 因此我的 PYTHONPATH 上只有该工作区 我意识到这不太理想 所以我想知道是否有人可以建议一种更 正确 的方法来做到这一点 让我用一个假
  • 带 Qt 的菜单栏/系统托盘应用程序

    我是 Qt PyQt 的新手 我正在尝试制作一个应用程序 其功能将从菜单栏 系统托盘执行 这里展示了一个完美的例子 我找不到关于如何做到这一点的好资源 有人可以建议吗 Thanks 我认为您正在寻找与QMenu and QMainWindo
  • 将二进制数转换为包含每个二进制数的数组

    我试图将二进制值转换为每个 1 0 的列表 但我得到默认的二进制值而不是列表 我有一个字符串 我将每个字符转换为二进制 它给了我一个列表 其中每个字符都有一个字符串 现在我试图将每个字符串拆分为值为 0 1 的整数 但我什么也得不到 if

随机推荐

  • Android 和 IOS 是否可以在后台发送短信?

    我想制作一个应用程序 其主要功能取决于发送短信 在我开发 android native 之前 但现在我使用 React Native 来为 IOS 和 Android 制作它 在 Android 中 如果获得用户许可 可以在后台发送短信 但
  • object.style.x 不返回任何内容[重复]

    这个问题在这里已经有答案了 在我网站上的 JavaScript 中 我有这样的内容 console log document getElementById side news style display 我已经尝试过很多样式 但它没有返回任
  • 如何获取优酷access_token

    我在哪里可以找到access token refresh token在我的优酷账号里 我找到了如何使用外部脚本通过 API 将视频上传到 youku com 但我需要access token refresh token使用它 您需要对优酷应
  • 如何对xml进行排序?

    我有一个 XML 文件 如下所示
  • 删除重复的 SQL 记录以允许唯一键

    我在 MYSQL 数据库中有一个表 销售 该表理应强制执行唯一约束以防止重复 事实证明 首先删除欺骗并设置约束有点棘手 表结构 简化 id 唯一 autoinc 产品编号 目标是强制product id 的唯一性 我想要应用的重复数据删除策
  • PHP 数组键字符串不带引号

    我正在将文件移动到服务器 并使用 GET mode 等变量 而 mode 中不带 单引号 它在本地运行良好 但在服务器上我收到通知 我该如何克服这个问题 这是我的 phpinfo 文件phpinfo http solutiq com php
  • r testthat 和 covr 在非包库中使用

    我希望能够使用testthat and covr在一个项目中not一个 r 包 事实上不使用任何第三方服务 只是普通的旧 r 源文件的集合 我正在努力找出这是否可行 如果可以 则已设置有关如何设置的说明 我发现假设你正在编写一个 r 包 我
  • 硬刷新后注册 Service Worker

    每当硬刷新后重新加载具有 Service Worker 的 Web 应用程序时 Ctrl F5例如 对于 Chrome Service Worker 之后无法注册 根据文档W3C https w3c github io ServiceWor
  • IPv6中的/64是什么意思[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有ipv 6的vps 例如 2605 6f00 XXX XXXX XXXX 64 我不明白 64的含义 这是否意味着我的 vps 有多个 ipv6
  • HashSet如何不允许重复?

    我正在经历add的方法HashSet 值得一提的是 如果该集合已包含该元素 则调用将保持该集合不变并返回 false But the add方法在内部保存值HashMap public boolean add E e return map
  • 无法使用 PHP ftp_connect() 连接 FTP 服务器

    我试图使用 PHP 的 ftp connect 函数连接 ftp 服务器 如下所示 但它返回这个错误 警告 ftp connect function ftp connect php network getaddresses getaddri
  • 更改“返回”键盘按钮的文本

    如何将 返回 按钮的标准文本更改为其他内容 我希望它是 添加 不幸的是 您可以使用以下命令将 Return 更改为这些预定义标签之一 returnKeyType财产 返回 默认 Go Google Join Next Route Searc
  • 在运行的 Swing 应用程序中替换 AWT EventQueue 的安全方法

    我维护的 Swing 应用程序中的各种零星问题似乎是由它使用自己的自定义版本替换默认 AWT 事件队列的方式引起的Toolkit getDefaultToolkit getSystemEventQueue push new AEventQu
  • 使用自定义渲染器,我可以使 TableSection.Title 以小型混合大小写形式显示吗?

    这是我目前拥有的
  • 使用 python 更新 Google 搜索方法

    我试图使用xgoogle https github com pkrumins xgoogle但我已经 3 年没有更新了 即使我设置每页 100 个结果 我也只能得到不超过 5 个结果 如果有人使用 xgoogle 没有任何问题 请告诉我 现
  • 菜单图标未显示在操作栏上

    Android Studio 0 5 8 Hello 由于某种原因 图标永远不会显示在 ActionBar 上 我使用了 ifRoom withText 的组合 但仍然不显示 我也尝试过在横向中旋转 我正在使用 genymotion 4 4
  • 由 UpdatePanel 内的 GridView 内的 LinkBut​​ton 触发的完整回发

    我在 UpdatePanel 中有一个 GridView 模板字段中有一个用于标记项目的按钮 从功能上讲 这工作得很好 但该按钮总是触发整页回发而不是部分回发 如何获得触发部分回发的按钮
  • 权限被拒绝,但在清单中设置了权限

    我收到此错误 删除失败 ENOENT 没有此类文件或目录 storage emulated 0 screenShot jpgFileNotFoundException storage emulated 0 screenShot jpg 打开
  • 从 C# 调用高阶 F# 函数

    给定 F 高阶函数 在参数中采用函数 let ApplyOn2 f int gt int f 2 和 C 函数 public static int Increment int a return a 我怎么打电话ApplyOn2 with I
  • 将嵌套字典中的所有键从camelCase转换为snake_case

    我有一本类似这样的字典 firstName abc lastName xyz favoriteMovies Star Wars The lone ranger favoriteCountries country China capitalC