Replace正在用python生成奇怪的答案

2024-06-16 08:48:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用字典键值对替换一些字符串。你知道吗

dict= {'MAA':'MADRAS', 'MAD':'MADRID'}

现在使用.replace(),它将MAA替换为MADRAS,但是MADRAS的MAD再次被MARDRID替换。这给了我错误的输出,我有8000多个键值对,所以我的输出变得非常奇怪。有什么办法可以纠正吗。你知道吗

任何建议都非常感谢。你知道吗


我使用以下代码:

#creating dict from dataframe with 8k+ key value pairs.. 
iata_dict = dict(zip(df7.CityCode, df7.CityName))
for x,y in iata_dict.items():
    df6["Itinerary"] = df6["Itinerary"].str.replace(x, y) 

这是我的数据框行程表中的一列,有如下数据-

BRISBANE-AKL-SCL-LIM/CIX-LIM/LAX/BNE
PER-HKG/HND/PVG-HKG/PER
PER/JNB/PER
PER-DXB/ALA-TSE/LHR-DXB/PER
BNE/LST/MEL-CHC/IVC/CHC/BNE
ANF/SCL-ATL/SLC-LAX-SYD/BNE
MAA-BOM/HYD/MAA
MEL/SIN/MEL
PER-SYD/SFO/MSO/SLC-LAX-BNE/PER

Tags: 数据dictreplace键值permadmeliata
1条回答
网友
1楼 · 发布于 2024-06-16 08:48:39

它需要优化,但这是可行的:

import re
di= {'MAA':'MADRAS', 'MAD':'MADRID'}
st = ['BRISBANE-AKL-SCL-LIM/CIX-LIM/LAX/BNE',
'PER-HKG/HND/PVG-HKG/PER',
'PER/JNB/PER',
'PER-DXB/ALA-TSE/LHR-DXB/PER',
'BNE/LST/MEL-CHC/IVC/CHC/BNE',
'ANF/SCL-ATL/SLC-LAX-SYD/BNE',
'MAA-BOM/HYD/MAA',
'MEL/SIN/MEL',
'PER-SYD/SFO/MSO/SLC-LAX-BNE/PER']
for s in st:
    for d in di.keys():
        r = re.compile('(?![A-Z])*' + d + '(?![A-Z])*')
        s = re.sub(r, di[d],s)
    print(s)

这个正则表达式检查我们替换的单词是否没有被其他单词或字母包围。其他周围的符号也可以。 如果您想优化这段代码,可以在字符串循环之前编译表达式。你知道吗

以下是输出:

BRISBANE-AKL-SCL-LIM/CIX-LIM/LAX/BNE
PER-HKG/HND/PVG-HKG/PER
PER/JNB/PER
PER-DXB/ALA-TSE/LHR-DXB/PER
BNE/LST/MEL-CHC/IVC/CHC/BNE
ANF/SCL-ATL/SLC-LAX-SYD/BNE
MADRAS-BOM/HYD/MADRAS
MEL/SIN/MEL
PER-SYD/SFO/MSO/SLC-LAX-BNE/PER

相关问题 更多 >