我遇到了问题,无法得到正确的解决方案。
这是我的名单,其中包含地址:
addresses = ['Paris, 9 rue VoltaIre', 'Paris, 42 quai Voltaire', 'Paris, 87 rue VoLtAiRe']
我希望得到治疗后的结果:
to_upper_words = ['paris', 'voltaire']
因为'巴黎'和'伏尔泰'都在各方面。
目标是将所有常用单词加在上面,例如结果:
'巴黎,343 BOULEVARD SAINT-GERMAIN'
'巴黎,458 BOULEVARD SAINT-GERMAIN'
'巴黎','大道','圣日耳曼'是大写的,因为所有字符串(在这种情况下为两个)都有这些单词。
我找到了多个解决方案但只有两个字符串,结果很难申请N个字符串。
如果有人可以提供帮助......
提前谢谢!
答案 0 :(得分:1)
删除逗号,以便只需在空白处拆分即可挑选出单词。然后使用set intersection查找所有地址共有的单词。 (我的收藏中只有一个这样的词,即蒙特利尔。)现在查看原始的地址集合,用大写的等价物替换每一个常见词的出现。这样做最可能的错误可能是尝试为列表中的单个值分配值。但是,这些实际上是副本,这就是我安排将修改后的值分配给addressses[i]
的原因。
>>> addresses = [ 'Montréal, 3415 Chemin de la Côte-des-Neiges', 'Montréal, 3655 Avenue du Musée', 'Montréal, 3475 Rue de la Montagne', 'Montréal, 3450 Rue Drummond' ]
>>> sans_virgules = [address.replace(',', ' ') for address in addresses]
>>> listes_de_mots = [sans_virgule.split() for sans_virgule in sans_virgules]
>>> mots_en_commun = set(listes_de_mots[0])
>>> for liste in listes_de_mots[1:]:
... mots_en_commun = mots_en_commun.intersection(set(liste))
...
>>> mots_en_commun
{'Montréal'}
>>> for i, address in enumerate(addresses):
... for mot in list(mots_en_commun):
... addresses[i] = address.replace(mot, mot.upper())
...
>>> addresses
['MONTRÉAL, 3415 Chemin de la Côte-des-Neiges', 'MONTRÉAL, 3655 Avenue du Musée', 'MONTRÉAL, 3475 Rue de la Montagne', 'MONTRÉAL, 3450 Rue Drummond']