Python将列表中逗号分隔的单词替换为字典值(如果字典键中存在)

Python将列表中逗号分隔的单词替换为字典值(如果字典键中存在),python,Python,我想将单词替换为相应的字典键:value(如果存在)。例如,我有一个逗号分隔的列表 unfiltered = ['Cat,Dog,Cow','','Horse,Whale','Fish,Giant Elephant'] 我想把“鲸鱼”改成“大鲸鱼”,把“鱼”改成“水母”,就像这本字典: word_to_change = {'Whale': 'Big Whale', 'Fish': 'Jellyfish'} 要使结果如下所示: ['Cat,Dog,Cow','','Horse,Big Whal

我想将单词替换为相应的字典键:value(如果存在)。例如,我有一个逗号分隔的列表

unfiltered = ['Cat,Dog,Cow','','Horse,Whale','Fish,Giant Elephant']
我想把“鲸鱼”改成“大鲸鱼”,把“鱼”改成“水母”,就像这本字典:

word_to_change = {'Whale': 'Big Whale', 'Fish': 'Jellyfish'}
要使结果如下所示:

['Cat,Dog,Cow','','Horse,Big Whale','Jellyfish,Giant Elephant']
我可以组合“未筛选”列表中的所有元素,并使用字典值进行筛选:

unfiltered_combine = ['Cat','Dog','Cow','','Horse','Whale','Fish','Giant Elephant']

[x if x not in word_to_change else word_to_change[x] for x in lists]
过滤组合词时的结果:

['Cat', 'Dog', 'Cow', '', 'Horse', 'Big Whale', 'Jellyfish', 'Giant Elephant']

但是,我希望保持列表“未过滤”,而不合并其元素。有没有办法将“未筛选”列表筛选为“word\u to\u change”字典键:value?如果您能提供一些建议,我将不胜感激。

您可以告诉我们以下理解:

unfiltered = ['Cat,Dog,Cow', '', 'Horse,Whale', 'Fish,Giant Elephant']
wtc = {'Whale': 'Big Whale', 'Fish': 'Jellyfish'}

result = [','.join(wtc.get(s, s) for s in e.split(',')) for e in unfiltered]
# ['Cat,Dog,Cow', '', 'Horse,Big Whale', 'Jellyfish,Giant Elephant']
这就利用了这种方法。您可以删除列表元素,将转换和标记重新应用到一起

unfiltered = ['Cat,Dog,Cow','','Horse,Whale','Fish,Giant Elephant']
word_to_change = {'Whale': 'Big Whale', 'Fish': 'Jellyfish'}

for key, value in word_to_change.items():
    unfiltered = [w.replace(key, value) for w in unfiltered]
输出:

['Cat,Dog,Cow', '', 'Horse,Big Whale', 'Jellyfish,Giant Elephant']

已编辑:仅当新值不在初始列表中时才能正常工作。

您可以使用。但是,获取此选项会过度应用:例如“大鲸鱼”->“大鲸鱼”。它还对dict中的每个条目执行一次不必要的迭代。