0

我有一个街道名称列表

streetNames = ['WELSESTRAAT', 'HENDRIKLAAN', 'LOMMERWEG']

还有另一个带有街道缩写的列表

streetAbbr = [['WEG', 'WG'], ['STRAAT', 'STR'],['LAAN', 'LN']]

我试图遍历街道名称并用 str 替换 straat,用 wg 替换 weg 等等,但我被困在替换部分,因为只有单词的一部分没有这种方法。

for name in streetNames:
    for abbr in streetAbbr:
        if str(abbr[0]) in str(name):
            name.replace('straat', abbr[1]) #doesn't work 
4

3 回答 3

2

您的代码中的问题是您正在替换您正在迭代的变量,这对原始列表没有影响。而是通过索引它重新分配给列表:

d = dict(streetAbbr)
# {'WEG': 'WG', 'STRAAT': 'STR', 'LAAN': 'LN'}

for k,v in d.items():
    for i, name in enumerate(streetNames):
        if k in name:
            streetNames[i] = name.replace(k, v)

print(streetNames)
# ['WELSESTR', 'HENDRIKLN', 'LOMMERWG']
于 2020-02-20T10:22:21.703 回答
1
result = [name.replace(abbr[0], abbr[1]) for name in streetNames for abbr in streetAbbr if abbr[0] in name]    
于 2020-02-20T10:23:32.447 回答
1

这里的问题是该replace()函数找到一个空格来替换字符串。由于您的数组中只有一个单词,因此它不起作用。

@Yatu 的答案是正确的,但如果您不想更新代码中的数据结构,您可以使用这个特定于用例的解决方案。

for name in streetNames:
    for abbr in streetAbbr:
        if abbr[0] in name:
            new_str = name.split(abbr[0])
            name = f"{new_str[0]}{abbr[1]}" 
            print(name)

如果由于使用了拆分,名称中多次出现相同的子字符串,则此解决方案可能不起作用。但是由于问题中没有提供此类示例,因此假设这应该有效。

于 2020-02-20T11:31:39.270 回答