有一个非常简单的函数来替换dict:
def replace_all(text, dic):
for i, j in dic.iteritems():
text = text.replace(i, j)
return text
我在pandas dataframe列中调用此函数。可以是一个列表或其他任何东西,它只是我现在的例子) 以下是dataframe的示例:
**root**
P1
P2
P10
我想最终得到类似的东西:
**root** **gen**
P1 bob
P2 jack
P10 mike
因此我使用这个小函数和一个字典
gen={"P1":"bob", "P2":"jack", "P10":"mike"}
df['gen']=df['root'].apply(lambda x : replace_all(x,gen))
没有错误信息,但我得到部分匹配。
**root** **gen**
P1 bob
P2 jack
P10 bob0
花了P10并替换为P1,这有点意义,但如何防止这种情况?
由于
答案 0 :(得分:1)
str.replace
方法完全按照文档说的那样做...: - p
尝试将replace_all
功能更改为:
def replace_all(text, dic):
return dic.get(text, text)
dict.get(key, default)
方法在dict[key]
时返回key in dict
,否则返回default
。
答案 1 :(得分:0)
答案 2 :(得分:0)
将text = text.replace(i, j)
替换为text = dic[text]
答案 3 :(得分:0)
由于replace
会找到字符串的任何部分,因此请将此视为替代:
>>> text = 'Hello P1 this is P2 with P10'
>>> d = {'P1': 'world', 'P2': 'peanut', 'P10': 'butter'}
>>> ' '.join(d.get(i, i) for i in text.split())
'Hello world this is peanut with butter'