字典中几乎相似的键

时间:2019-03-08 21:25:14

标签: python

我有一个包含以下列的数据框:

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

4 个答案:

答案 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])