【发布时间】:2018-04-25 11:56:20
【问题描述】:
假设我有一个字典列表
[{'TELEPHONE': '111', 'STATUS': 'BUSY'}, {'TELEPHONE': '122', 'STATUS': 'BUSY'},
{'TELEPHONE': '133', 'STATUS': 'FREE'}]
我有一个句子“PHONE is STATUS”。我想将句子中的关键字替换为字典中的值。所以输出应该是
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 不同,有没有类似的方法来做这样的替换?我不想更改字典中的键。我可以做类似“如果我遇到“PHONE”,然后我使用字典中的“TELEPHONE”键检索?”
【问题讨论】:
-
您可以在字典中将 TELEPHONE 更改为 PHONE,然后将新字典与 PHONE 和 STATUS 一起使用。
-
我不明白字符串“PHONE is STATUS”在哪里起作用。您的输出可以仅从字典列表中生成。能详细点吗?
-
假设您的字典列表名为
dicts,您可以尝试以下操作:sentence = "TELEPHONE is STATUS"; " ".join(" ".join(d.get(y) if y in d else y for y in sentence.split()) for d in dicts)。 -
抱歉不清楚。问题是有许多不同的模式。一种可能是“PHONE is STATUS”,也可能是“PHONE 的状态是 STATUS”。我必须按照模式,一一更换。
-
" ".join(" ".join(d.get(y) if y in d else y for y in sentence.replace('PHONE', 'TELEPHONE').split()) for d in dicts)将PHONE替换为TELEPHONE并执行我之前的评论打算执行的操作。
标签: python dictionary string-matching