首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果值与给定列表匹配,则返回字典的键

如果值与给定列表匹配,则返回字典的键
EN

Stack Overflow用户
提问于 2021-02-12 11:44:55
回答 4查看 862关注 0票数 1

如果字典中的值与列表中的元素匹配,我希望返回给定字典的所有键。假设我有以下字典:

代码语言:javascript
复制
my_dict = {'flower1': ['blue'], 
           'flower2': ['red', 'green', 'blue'],
           'flower3': ['yellow'],
           'flower4': ['blue', 'black', 'cyan']}

现在,我希望将字典中的值与列表中的下列元素相匹配:

代码语言:javascript
复制
my_lst = ['black',
          'red',
          'blue',
          'yellow',
          'green',
          'purple',
          'brown',
          'cyan']

我的目标是得到一本字典,如下所示:

代码语言:javascript
复制
result_dict = {'black': ['flower4'], 
               'red': ['flower2'],
               'blue': ['flower1', 'flower2', 'flower4'],
               'yellow': ['flower3']
               'green': ['flower2'], 
               'purple': [],
               'brown': [],
               'cyan': []}

现在,我尝试了一个简单的列表理解,它工作得很好,但是只返回一个简单且无序的列表,如下所示:

代码语言:javascript
复制
In[14]: [key for key, value in my_dict.items() for i in range(0, len(my_lst)) if my_lst[i] in value]

Out[14]:['flower1',
         'flower2',
         'flower2',
         'flower2',
         'flower3',
         'flower4',
         'flower4',
         'flower4']

做这样的手术最好的方法是什么?我不能把头挪开,任何帮助都会很感激的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-02-12 11:54:15

别把事情弄得太复杂。分两个完全独立的步骤:

  1. 通过花卉/颜色数据将my_lst转换为合适的result result,并将它们添加到result字典中。

例如:

代码语言:javascript
复制
# create result dict, adding each color as a key
# make the value of each key an empty list initially
result = {k: [] for k in my_lst}

# iterate through the items of the flower/color dict
for flower, colors in my_dict.items():

    # append the flower corresponding to each color
    # to the appropriate list in the result dict
    for color in colors:
        result[color].append(flower)

print(result)

输出:

代码语言:javascript
复制
{'black': ['flower4'], 'red': ['flower2'], 'blue': ['flower1', 'flower2', 'flower4'], 'yellow': ['flower3'], 'green': ['flower2'], 'purple': [], 'brown': [], 'cyan': ['flower4']}

当然,这假设my_dict中的每种颜色都发生在my_lst中。

票数 2
EN

Stack Overflow用户

发布于 2021-02-12 11:54:53

这可以使用两个for循环来实现。它的可读性远比使用一条线。我提供了一个代码片段,它完全按照您的要求执行,理解它的工作原理是相当直观的。您接受每个list元素,并检查每个键是否可以在值列表中找到该元素。

代码语言:javascript
复制
result_dict = {}
for ele in my_lst:
    result_dict[ele] = []
    for key in my_dict.keys():
        if ele in my_dict[key]:
            result_dict[ele].append(key)
票数 2
EN

Stack Overflow用户

发布于 2021-02-12 11:55:32

此函数可用于替换您的“result_dict”:

代码语言:javascript
复制
def flowers_by_color(color, data = my_dict):
    return [flower for flower in data.keys() if color in data[flower]]

result_dict = {color:flowers_by_color(color) for color in my_lst}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66171273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档