我有一个字典,我想用这个模式重命名所有的键(测试号1 =>testNumber1)
这是我的字典:
{'id': '4', 'event title': 'Coldplay World Tour', 'event start date': '29/07/2022 20:30', 'event end date': '30/07/2022 01:00', 'name of the location hosting the event (optional)': 'Stade de France', 'address of the location': '93200 Saint-Denis', 'total ticket number': '10000', 'maximum tickets per user': '6', 'sale start date': '04/05/2022', 'line up': '', 'asset url': 'https://coldplay.com/coldplay_asset.mp4'}
在另一个json -我已经做了这两个元素:
self.json_informations[i]['smart_contract']['collectionName'] = self.json_informations[i]['smart_contract'].pop('collection name') #on remplace collection par collectionName
但是它太长了,不能改变所有的参数(而且它不是很灵活)。0
我也试过循环,但它没有工作:
for j in range(len(self.json_informations[0])): #my dict is in json_informations[0]
print(self.json_informations[0][j])
但是它给了我一个错误
print(self.json_informations[i][j])
KeyError: 0
我想得到这个结果作为我的输出
{'id': '4', 'eventTitle': 'Coldplay World Tour', 'eventStartDate': '29/07/2022 20:30', 'eventEndDate': '30/07/2022 01:00', 'nameOfTheLocation': 'Stade de France', 'addressOfTheLocation': '93200 Saint-Denis', 'totalTicketNumber': '10000', 'maximumTicketsPerUser': '6', 'saleStartDate': '04/05/2022', 'lineUp': '', 'assetUrl': 'https://coldplay.com/coldplay_asset.mp4'}
谢谢你的回答!
循环中的唯一问题是以错误的方式遍历字典。遍历字典的方法如下:
mydict = {"Hi": 1, "there": 2, "fellow": 3}
for key in mydict:
print(key)
的输出为:
Hi
there
fellow
因为遍历字典会将键本身作为循环变量。您试图在循环中遍历整数并访问与所述整数值键对应的字典值,但是如果所述键不存在,则试图访问与键对应的项显然会产生错误。因此,要在循环中更改字典中的键名,可以使用如下循环:
mydict = {"Hi": 1, "there": 2, "fellow": 3}
for key in mydict:
mydict[newkey] = mydict.pop(key)
你会注意到这和你一开始做的很相似,现在只是在一个循环上。
我想这就是你正在寻找的确切解决方案:
import re
input_data = {'id': '4',
'event title': 'Coldplay World Tour',
'event start date': '29/07/2022 20:30',
'event end date': '30/07/2022 01:00',
'name of the location hosting the event (optional)': 'Stade de France',
'address of the location': '93200 Saint-Denis',
'total ticket number': '10000',
'maximum tickets per user': '6',
'sale start date': '04/05/2022',
'line up': '',
'asset url':'https://coldplay.com/coldplay_asset.mp4'}
copy_a = input_data.copy()
for key, value in copy_a.items():
# print(x.title())
if ' ' in key:
# match string with regex
new_str = re.sub(r'sb[a-z]', lambda m: m.group().upper(), key)
# replace 1st char of word to upper case except 1st word
new_key = new_str.replace(" ", "")
input_data[new_key] = input_data[key]
# delete key from input_data
del input_data[key]
print(input_data)
输出:
{'id': '4', 'eventTitle': 'Coldplay World Tour', 'eventStartDate': '29/07/2022 20:30', 'eventEndDate': '30/07/2022 01:00', 'nameOfTheLocationHostingTheEvent(optional)': 'Stade de France', 'addressOfTheLocation': '93200 Saint-Denis', 'totalTicketNumber': '10000', 'maximumTicketsPerUser': '6', 'saleStartDate': '04/05/2022', 'lineUp': '', 'assetUrl': 'https://coldplay.com/coldplay_asset.mp4'}
它看起来有点棘手,需要一些额外的内存,但它似乎工作。需要测试:
import json
from re import sub
data = {'id': '4',
'event title': 'Coldplay World Tour',
'event start date': '29/07/2022 20:30',
'event end date': '30/07/2022 01:00',
'name of the location hosting the event (optional)': 'Stade de France',
'address of the location': '93200 Saint-Denis',
'total ticket number': '10000',
'maximum tickets per user': '6',
'sale start date': '04/05/2022',
'line up': '',
'asset url':'https://coldplay.com/coldplay_asset.mp4'}
data = json.loads(sub(r'(sw)(?=[^,]+?:)', lambda m: m[1].upper().strip(), json.dumps(data)))
>>> data
'''
{'id': '4',
'eventTitle': 'Coldplay World Tour',
'eventStartDate': '29/07/202220:30',
'eventEndDate': '30/07/202201:00',
'nameOfTheLocationHostingTheEvent (optional)': 'Stade de France',
'addressOfTheLocation': '93200 Saint-Denis',
'totalTicketNumber': '10000',
'maximumTicketsPerUser': '6',
'saleStartDate': '04/05/2022',
'lineUp': '',
'assetUrl': 'https://coldplay.com/coldplay_asset.mp4'}