将字典值与列表进行比较并返回键

2024-09-15 17:46:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码就快完成了,我想我需要做一些小的更改来返回所需的输出,但实际上我遇到了一个“编码器块”(如果有类似的情况)。 非常感谢您的帮助: 我的代码:

def no_you_pick(my_dict, my_list):
    output = []
    for i in my_list:
        for k, v in my_dict.items():
            if i in v:
                output.append(k)
                output.sort()
                return output
        else:
            return "Sorry, no restaurants meet your restrictions"

grading_scale={'Moes, Larrys, Curlys': ['vegetarian', 'vegan', 'gluten-free'], 'Hot Chili Pepper': ['vegetarian', 'gluten-free', 'vegan']}
guests_diet = ["vegetarian", "vegan", "gluten-free"]
print(no_you_pick(grading_scale, guests_diet))

输出:

['Moes, Larrys, Curlys']

期望输出:

["Hot Chili Pepper", "Moes, Larrys, Curlys"]

PS:我还尝试按照嵌套for循环返回输出,但它返回[“Hot Chili Pepper”] *我不想使用列表理解,因为我不想在[]括号内打印else语句


Tags: noinfreeforoutputmyhotpepper
3条回答

您返回得太早(从循环内部),当然,您可以缩短此时间:

def no_you_pick(my_dict, my_list):
    output = [k for k, v in my_dict.items() if any(x in v for x in my_list)]
    if output:
        output.sort()  # only sort it once
        return output
    return "Sorry, no restaurants meet your restrictions"

代码中的问题是返回找到的第一个值。不要忘记调用return退出函数。 一个解决方案是在forloop外部添加回流管

更简单的方法是:

def no_you_pick(my_dict, my_list):
    output = [x[0] for x in my_dict.items() if set(my_list).issubset(x[1])]
    if len(output) > 0:
        return output
    return "Sorry, no restaurants meet your restrictions"

您应该添加更多关于不同输入的示例。
首先,您在输出中只得到一个结果,因为您一找到匹配项就返回。
其次,如果他们的菜肴匹配多个输入,您应该避免多次添加结果:我认为输出应该是一个集合。
最后,如果需要列表,为什么要返回字符串?可以返回[]{},但是您可以打印您的警告:

def no_you_pick(my_dict, my_list):
  output = set()
  for i in my_list:
      for k, v in my_dict.items():
          if i in v:
              output.add(k)
  if not output:
      print("Sorry, no restaurants meet your restrictions")
  return output
grading_scale={'Moes, Larrys, Curlys': ['vegetarian', 'vegan', 'gluten-free'], 'Hot Chili Pepper': ['vegetarian', 'gluten-free', 'vegan']}
guests_diet = ["vegetarian", "vegan", "gluten-free"]
print(no_you_pick(grading_scale, guests_diet))

相关问题 更多 >