Python:从 JSON 数组中将键值转换为小写的智能方法

标签 python

我正在尝试进行小写数据转换。我的输入数据采用以下格式

ret = { "users":[
             {"EMAIL":"jogn@doe.com","Name":"John Doe"},
             {"EMail":"james@black.com","nAme":"James Black"}
             ]
}

输出应该是这样的

ret = { "users":[
                 {"email":"jogn@doe.com","name":"John Doe"},
                 {"email":"james@black.com","name":"James Black"}
                 ]
    }

我所做的是:

users = ret['users']
new_array = []
for item in users:
    for key in item:
        k = key.lower()
        new_array.append({k:item[key]})

结果是我所期望的,但我想知道是否有更聪明、更好的方法来完成这项任务。有没有办法避免双重循环?

谢谢。

最佳答案

即使您的原始解决方案已经非常可读,您也可以尝试使用列表理解:

ret = { "users":[
                 {"EMAIL":"jogn@doe.com","Name":"John Doe"},
                 {"EMail":"james@black.com","nAme":"James Black"}
                ]
      }

ret['users'] = [dict((k.lower(), v) for k, v in d.items()) for d in ret['users']]

>>> print(ret)
{'users': [{'email': 'jogn@doe.com', 'name': 'John Doe'}, {'email': 'james@black.com', 'name': 'James Black'}]}

此外,与覆盖原始数据相比,仅重建所有值都已更新的新字典可能更安全。这可以在下面证明:

result = {}

# Can be a another one-liner, but then it becomes unreadable
for key, value in ret.items():
    result[key] = [dict((k.lower(), v) for k, v in d.items()) for d in value]

>>> print(result)
{'users': [{'name': 'John Doe', 'email': 'jogn@doe.com'}, {'name': 'James Black', 'email': 'james@black.com'}]}

如果你真的想要第二部分的一个类轮:

result = dict((key, [dict((k.lower(), v) for k, v in d.items()) for d in value]) for key, value in ret.items())

关于Python:从 JSON 数组中将键值转换为小写的智能方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47675123/

相关文章:

python - AWS Glue 无法读取 JSON Snappy 文件

python - 在比较两个数据帧时,有没有有效的方法为单元格分配 id?

python - 如何使用Python流对象?

python - NumPy:如何检索多维数组中最大值的索引

python - pandas ewm 和滚动方法不填写 NA

python - 如何在 Python 列表中分隔字符串和数字?

python - 注释字段上的 django-filter 过滤器

python - 提取 grib 文件的 Lon 和 Lat 范围

python - 更改多个文件的后缀

python - Pandas HDF5 列选择不起作用