猿问

Python中的字典循环有一些错误

我想制作一个酒菜单程序,给出1)酒名和2)酒的价格(如果客户使用Python 3设置酒名)。为此,我制作了一个包含字典的酒单,如下所示。


wine = [

{'Origin': 'A', 'Name': 'w1', 'price': 10000},

{'Origin': 'B', 'Name': 'w2', 'price': 2000},

{'Origin': 'C', 'Name': 'w3', 'price': 4000},

{'Origin': 'D', 'Name': 'w3', 'price': 55000},

{'Origin': 'E', 'Name': 'w2', 'price': 63000},

{'Origin': 'F', 'Name': 'w6', 'price': 80000}

]


wish_wine = input('Insert the wine what you want to have : ')

我正在尝试实现的算法如下:


1)尝试搜索列表中的所有元素,是否有客户想要的葡萄酒:


2)如果在列表中,请返回所有结果及其名称和价格。


3)如果列表中没有葡萄酒,则打印“对不起,没有葡萄酒...”消息


for i in range(len(wine)):

    if wish_wine in wine[i]['Name']:

        print('wine', wine[i]['Name'], 'is', wine[i]['price'], '$'.)

else:

    print('Sorry, there is no wine what you want.')

这是我现在编写的代码,在3)的情况下效果很好,但即使在2)的情况下,它也显示“对不起,没有酒...”的消息。


慕标5832272
浏览 334回答 3
3回答

小怪兽爱吃肉

您缺少一个break语句或一个标志,表明您找到了结果。另外,除了迭代外,range(len(wine))您还可以直接在酒单上进行迭代,该酒单每次迭代都会返回一个酒。这将使您的代码更具可读性,可维护性和效率:wines_found = Falsefor w in wine:    if wish_wine in w['Name']:        print('wine', wine['Name'], 'is', wine['price'], '$'.)        wines_found = Trueif not wines_found:    print('Sorry, there is no wine what you want.')请记住,如果您的酒名是“ Merlot”,那么M in "Merlot"您会发现它通过了。如果您有多种开始的葡萄酒,这将成为一个问题M。如果您希望避免这种情况,请更改if wish_wine in w['Name']为if wish_wine == w['Name'],然后添加一个break。

阿波罗的战车

您可以collections.defaultdict用来重组字典,以按酒名排序。仅当您要查找完全匹配的名称时,此方法才有效。from collections import defaultdictwine_d = defaultdict(list)for item in wine:    wine_d[item['Name']].append(item)然后访问输入葡萄酒名称的信息很简单:wish_wine = input('Insert the wine what you want to have : ')print(wine_d.get(wish_wine, 'No wine found'))
随时随地看视频慕课网APP

相关分类

Python
我要回答