我的代碼快到了,我想我需要做一個小改動才能回傳所需的輸出,但實際上我遇到了“編碼器塊”(如果有類似的東西)。非常感謝任何幫助:我的代碼:
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 陳述句。
uj5u.com熱心網友回復:
您回傳得太早(從回圈內),當然您可以縮短它:
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"
uj5u.com熱心網友回復:
您應該添加更多示例,說明您對不同輸入的期望。
首先,您只能在輸出中得到一個結果,因為一旦找到匹配項就會回傳。
其次,如果他們的菜肴與多個輸入匹配,您應該避免多次添加結果:我認為輸出應該是一個集合。
最后,為什么要回傳一個字串,否則需要一個串列?可以回傳[]or {},您仍然可以列印警告:
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))
uj5u.com熱心網友回復:
您的代碼中的問題是您正在回傳您找到的第一個值。不要忘記呼叫 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"
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/311492.html
