我有一个包含以下列的数据框:
column_name
CUVITRU 8 gram
CUVITRU 1 grams
我想将这些克和克替换为克。所以我创建了字典
dict_ = {'gram':'gm','grams':'gm'}
我可以替换它,但是它将克转换为gms。以下是转换后的列:
column_name
CUVITRU 8 gm
CUVITRU 1 gms
如何解决此问题。
下面是我的代码:
dict_ = {'gram':'gm','grams':'gm'}
for key, value in dict_abbr.items():
my_string = my_string.replace(key,value)
my_string = ' '.join(unique_list(my_string.split()))
def unique_list(l):
ulist = []
[ulist.append(x) for x in l if x not in ulist]
return ulist
答案 0 :(得分:1)
因为它在“ grams”中找到“ gram”,所以一种方法是代替字符串,使用reg exp替换单词边界,例如(r"\b%s\....
在这里查看usign .sub的答案,例如:{{3 }}
答案 1 :(得分:0)
将较长的字符串grams
放在较短的gram
之前,例如{‘grams’:gm,’gram:’gm’}
,它将起作用。
好吧,我使用的是最新的python 3(如3.7.2),它保证了检索项目的顺序与在字典中创建的顺序相同。对于较早的Python,可能会发生(这似乎是问题),但不能保证。
答案 2 :(得分:0)
您实际上并不关心该命令;您关心其items()
方法产生的键/值对,因此只需将其存储在第一位即可。这样一来,无论您使用的是哪个Python版本,您都可以指定要尝试的替换顺序。
d = [('grams':'gm'), ('gram':'gm')]
for key, value in d:
my_string = my_string.replace(key,value)
答案 3 :(得分:0)
您可以按相反的密钥长度顺序进行替换:
dict_ = {'gram':'gm','grams':'gm'}
for key in sorted(dict_abbr, key=len, reverse=True):
my_string = my_string.replace(key, dict_[key])