Python 如果给定字符串与字典中的键值匹配,如何返回字符串中的多个键

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

我试图遍历一个dataframe列来提取一组特定的单词。我将这些映射为字典中的键值对,并且在一些帮助下,到目前为止已经成功地设置了每行的键

现在,我想做的是,如果字符串中存在值,则返回同一行中的多个键,并且这些键应该用
|
(管道)分隔

代码:

输出:

        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预期输出的原因。