我有一個字典串列,如下所示:
car_list = [
{'Toyota': '{name}/Toyota'},
{'Mazda': '{name}/Mazda'},
{'Nissan': '{name}/Nissan'}
]
現在,使用正則運算式,我想{name}用另一個字串(比如“ car”)替換所有 s,并更新字典串列。這是代碼:
regex = r'\{. ?\}'
for dic in car_list:
for key, value in dic.items():
for name in re.findall(regex, value):
value = value.replace(name, "car")
dic.update(key=value)
我知道正則運算式部分正在作業。但是,我收到此錯誤:
RuntimeError: dictionary changed size during iteration
我究竟做錯了什么?
uj5u.com熱心網友回復:
.update(key=value)向字典中插入一個新鍵,其中鍵是字串文字 'key'和值value(如上一行中所分配的)。
您應該使用方括號來索引字典,而不是呼叫.update():
for dic in car_list:
for key, value in dic.items():
for name in re.findall(regex, value):
value = value.replace(name, "car")
dic[key]=value
# Prints [{'Toyota': 'car/Toyota'}, {'Mazda': 'car/Mazda'}, {'Nissan': 'car/Nissan'}]
print(car_list)
uj5u.com熱心網友回復:
無需使用正則運算式 -str有兩個內置方法,format并且format_map, 來替換用大括號標記的欄位,如您的示例代碼:
msg = "Hello, {location}!"
print(msg.format(location="World"))
msg2 = "{greeting}, {place}!"
params = {"greeting": "Bonjour", "place": "Birmingham"}
print(msg2.format_map(params))
使用這個:
for dct in car_list:
for key, value in dct.items():
dct[key] = value.format(name="car")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/427806.html
