我有一个迭代字符串部分的函数,如果在字典中找到该部分,则将其替换为密钥:
def normalize(street):
acronyms = {'AVE':'AVENUE', 'RD': 'ROAD', 'BLVD': 'BOULEVARD',
'PKWY': 'PARKWAY','HWY':'HIGHWAY', 'ST': 'STREET',
'E': 'EAST','W':'WEST','S': 'SOUTH','N': 'NORTH'}
return [re.sub(r"\b%s\b" %street_part, acronyms[street_part],
street) for street_part in street.split() if street_part in
acronyms]
normalize('123 E MAIN AVE')
['123 EAST MAIN AVE', '123 E MAIN AVENUE']
而输出需要是: ['123 EAST MAIN AVENUE']
如何将每个返回值反馈给理解以进一步扩展?或者在理解中迭代迭代以获得最终的扩展地址?请协助。
答案 0 :(得分:1)
除非你在这里有复杂的正则表达式模式,否则我建议只在生成器理解中索引到dict。
In [1051]: acronyms = ...
In [1052]: text = '123 E MAIN AVE'
In [1055]: ' '.join(acronyms.get(x, x) for x in text.split())
Out[1055]: '123 EAST MAIN AVENUE'
acronyms.get(x, x)
会返回替换项(如果存在),或者只是重新回显原始字符串。
答案 1 :(得分:0)
将您的功能更改为:
def normalize(street):
acronyms = {'AVE':'AVENUE', 'RD': 'ROAD', 'BLVD': 'BOULEVARD',\
'PKWY': 'PARKWAY','HWY':'HIGHWAY', 'ST': 'STREET',\
'E': 'EAST','W':'WEST','S': 'SOUTH','N': 'NORTH'}
for street_part in street.split():
if street_part in acronyms:
street = re.sub(r"\b%s\b" %street_part, acronyms[street_part], street)
return street