Python 如果给定字符串与字典中的键值匹配,如何返回字符串中的多个键
我试图遍历一个dataframe列来提取一组特定的单词。我将这些映射为字典中的键值对,并且在一些帮助下,到目前为止已经成功地设置了每行的键 现在,我想做的是,如果字符串中存在值,则返回同一行中的多个键,并且这些键应该用Python 如果给定字符串与字典中的键值匹配,如何返回字符串中的多个键,python,pandas,dictionary,dataframe,Python,Pandas,Dictionary,Dataframe,我试图遍历一个dataframe列来提取一组特定的单词。我将这些映射为字典中的键值对,并且在一些帮助下,到目前为止已经成功地设置了每行的键 现在,我想做的是,如果字符串中存在值,则返回同一行中的多个键,并且这些键应该用|(管道)分隔 代码: 输出: Name Colour 0 Red and Blue Lace Midi Dress red 1 Long Armed Sweater Azure and Ru
|(管道)分隔
代码:
输出:
Name Colour
0 Red and Blue Lace Midi Dress red
1 Long Armed Sweater Azure and Ruby blue
2 High Top Ruby Sneakers red
3 Tight Indigo Jeans blue
4 T-Shirt Navy and Rose blue
预期结果:
Name Colour
0 Red and Blue Lace Midi Dress red
1 Long Armed Sweater Azure and Ruby blue|red
2 High Top Ruby Sneakers red
3 Tight Indigo Jeans blue
4 T-Shirt Navy and Rose blue|red
问题是,您在找到密钥后直接返回,而您应该继续搜索,直到找到所有结果:
def fetchColours(x):
keys = []
for key, values in colour.items():
for value in values:
if value in x.lower():
keys.append(key)
if len(keys) != 0:
return '|'.join(keys)
else:
return np.nan
要使其工作,您必须更改:
colour = {'red': ('red', 'rose', 'ruby'), 'blue': ('azure', 'indigo', 'navy')}
到
因为否则,它不会在每个句子中搜索术语“蓝色”,这意味着它无法将此键添加到第一个示例中的列表中。问题是,您在找到键后直接返回,而您应该继续搜索,直到找到所有结果:
def fetchColours(x):
keys = []
for key, values in colour.items():
for value in values:
if value in x.lower():
keys.append(key)
if len(keys) != 0:
return '|'.join(keys)
else:
return np.nan
要使其工作,您必须更改:
colour = {'red': ('red', 'rose', 'ruby'), 'blue': ('azure', 'indigo', 'navy')}
到
因为否则它不会在每个句子中搜索“蓝色”一词,这意味着它无法将此键添加到第一个示例中的列表中。这是怎么回事:
def fetchColors(x):
color_keys = []
for key, values in color.items():
for value in values:
if value in x.lower():
color_keys.append(key)
if color_keys:
return '|'.join(color_keys)
else:
return np.nan
这个怎么样:
def fetchColors(x):
color_keys = []
for key, values in color.items():
for value in values:
if value in x.lower():
color_keys.append(key)
if color_keys:
return '|'.join(color_keys)
else:
return np.nan
这段代码应该可以工作,但不知为什么不行,第一行应该是红色|蓝色,但它只是设置为红色。我尝试了这个解决方案,不幸地得到了与@RehanAzher相同的结果。@BobHarris是的,我找不到原因:)问题是“蓝色”不是键“蓝色”的值之一。@Nathan您的解决方案是正确的,实际上我已经准备好了,但是我正在试图找到我的输出不能匹配OP预期输出的原因。这段代码应该可以工作,但不知为什么它不能,第一行应该是红色|蓝色,但它只是设置为红色。我尝试了此解决方案,但不幸地得到了与@RehanAzher相同的结果。@BobHarris是的,我无法找到原因:)问题是“蓝色”不是键“蓝色”的值之一。@Nathan您的解决方案是正确的,事实上,我已经准备好了,但我正试图找到我的输出不能匹配OP预期输出的原因。