我正在尝试进行小写数据转换。我的输入数据采用以下格式
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/