[英]Replace a string to a value in dict using Python
假設我有一個字典清單
[{'TELEPHONE': '111', 'STATUS': 'BUSY'}, {'TELEPHONE': '122', 'STATUS': 'BUSY'},
{'TELEPHONE': '133', 'STATUS': 'FREE'}]
我有一句話“電話是狀態”。 我想將句子中的關鍵字替換為字典中的值。 所以輸出應該是
111忙122忙133免費
由於STATUS與字典中的鍵相匹配,因此我可以使用re來替換它,
pattern = re.compile(r'\b(' + '|'.join(val.keys()) + r')\b')
result = pattern.sub(lambda x: val[x.group()], text)
但是模式PHONE與字典中的按鍵TELEPHONE不同,是否有類似的方法來進行這種替換? 我不想更改字典中的鍵。 我可以做類似“如果我遇到“電話”,然后使用字典中的鍵“ TELEPHONE”進行檢索”的事情嗎?
您可以嘗試以下方法:
import re
sentence = "PHONE is STATUS"
keys = re.findall('[A-Z]+', sentence)
s = [{'TELEPHONE': '111', 'STATUS': 'BUSY'}, {'TELEPHONE': '122', 'STATUS': 'BUSY'}, {'TELEPHONE': '133', 'STATUS': 'FREE'}]
final_data = ' '.join([' is '.join([[b for a, b in i.items() if a.endswith(keys[0])][0], i[keys[-1]]]) for i in s])
輸出:
'111 is BUSY 122 is BUSY 133 is FREE'
我將創建一個后備密鑰字典,因此,如果找不到PHONE,它將使用具有默認值的鏈式get
調用在我們無法更改的字典中查找相應的密鑰。 我會將其應用於每個單詞並重新構建句子
dl = [{'TELEPHONE': '111', 'STATUS': 'BUSY'}, {'TELEPHONE': '122', 'STATUS': 'BUSY'},
{'TELEPHONE': '133', 'STATUS': 'FREE'}]
# synonyms dict, you can add as many as you want
mk = {"PHONE" : "TELEPHONE", "STATE" : "STATUS"}
for d in dl:
print(" ".join(d.get(w,d.get(mk.get(w),w)) for w in "PHONE is STATUS".split()))
結果:
111 is BUSY
122 is BUSY
133 is FREE
這種方法的優點是沒有線性查找。 問題是兩個get
都執行了,可以通過短路or
短路解決:
print(" ".join(d.get(w) or d.get(mk.get(w),w) for w in "PHONE is STATUS".split()))
現在,如果w
在d
,則不計算表達式的第二部分。
嘗試這個:
l = [{'TELEPHONE': '111', 'STATUS': 'BUSY'}, {'TELEPHONE': '122', 'STATUS': 'BUSY'}, {'TELEPHONE': '133', 'STATUS': 'FREE'}]
print("".join(["{} is {}".format(
i['TELEPHONE'], i['status']) for i in l]))
很難說出您要完成的任務,但我認為您有一個電話列表,並且正在獲取日志消息以更新其狀態。 嘗試這個:
import re
status_update = '111 is BUSY'
status_re = re.compile('(\d+) is ([A-Z]+)')
phone, new_status = status_re.match(status_update).groups()
found = False
for val in phone_list:
if phone == val['TELEPHONE']:
val['STATUS'] = new_status
found = True
if not Found:
print('phone not found')
else:
print('phone status updated')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.