python - 是否可以在不改变位置的情况下重命名字典中的键?
问题描述
我有一本字典,我想将一些小写的字典键重命名为驼峰式,但我想保持顺序。有没有办法保持完整性?
我正在写一种清洁剂,它会有所帮助,它看起来像这样
def key_cleanser(data):
name_cleanse_dict = {
'id': 'ID',
'emailid': 'emailId',
'firstname': 'firstName',
'middlename': 'middleName',
'lastname': 'lastName',
'addressline1': 'addressLine1',
'addressline2': 'addressLine2',
'addressline3': 'addressLine3',
'postalcode': 'postalCode',
}
if isinstance(data, dict):
dictionary = data.copy()
dict_keys = list(dictionary.keys())
for key in dict_keys:
if key in name_cleanse_dict.keys():
dictionary[name_cleanse_dict[key]] = dictionary.pop(key)
key = name_cleanse_dict[key]
return dictionary
return data
假设我的字典看起来像这样
person_data = {
'id': 5,
'firstname': 'Bob',
'lastname': 'Woolmer',
'gender': 'Male',
'country': 'USA'
'emailid': 'abs@gmail.com'
}
我得到以下输出:
{
'gender': 'Male',
'country': 'USA',
'ID': 5,
'firstName': 'Bob',
'lastName': 'Woolmer',
'emailId': 'abs@gmail.com'
}
我想要的输出是:
{
'ID': 5,
'firstName': 'Bob',
'lastName': 'Woolmer',
'gender': 'Male',
'country': 'USA',
'emailId': 'abs@gmail.com'
}
有没有办法维护一个序列,以防我为动态字典复制它。
解决方案
如果您可以将原始字典更改为 OrderedDicts,则类似这样的东西会起作用:
from collections import OrderedDict
def clense_data(data):
name_cleanse_dict = {
'id': 'ID',
'emailid': 'emailId',
'firstname': 'firstName',
'middlename': 'middleName',
'lastname': 'lastName',
'addressline1': 'addressLine1',
'addressline2': 'addressLine2',
'addressline3': 'addressLine3',
'postalcode': 'postalCode',
}
if isinstance(data, dict):
return OrderedDict([(name_cleanse_dict[k], v) if k in name_cleanse_dict else (k, v) for k, v in data.items()])
return data
def main():
person_data = OrderedDict([('id', 5),
('firstname', 'Bob'),
('lastname', 'Woolmer'),
('gender', 'Male'),
('country', 'USA'),
('emailid', 'abs@gmail.com')])
print(person_data)
new_person_data = clense_data(person_data)
print(new_person_data)
if __name__ == '__main__':
main()
输出:
OrderedDict([('id', 5), ('firstname', 'Bob'), ('lastname', 'Woolmer'), ('gender', 'Male'), ('country', 'USA'), ('emailid', 'abs@gmail.com')])
OrderedDict([('ID', 5), ('firstName', 'Bob'), ('lastName', 'Woolmer'), ('gender', 'Male'), ('country', 'USA'), ('emailId', 'abs@gmail.com')])
推荐阅读
- javascript - laravel websocket 无法建立到服务器的连接
- javascript - [类型错误:十六进制不是函数]
- python - 分配一个类别,根据值的范围作为新列,python
- flutter - 如何从 Flutter 的搜索代理中删除飞溅
- amazon-web-services - 如何在 EFS 和 EC2 之间配置权限
- python - 将字符串转换为 dict 键对象以供参考/分配
- html - 在传单标签 HTML 中添加一些 div
- php - 我有这个错误,我不知道为什么: PDOStatement :: execute (): SQLSTATE [HY093]: Invalid parameter number: parameter was not defined
- assembly - 我应该何时以及如何在我的 simd 例程中执行浮点转换?
- zsh - 为什么 tmuxinator zsh 完整文件不起作用?