簡體   English   中英

使用Python將字符串替換為dict中的值

[英]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()))

現在,如果wd ,則不計算表達式的第二部分。

嘗試這個:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM