为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕标5832272 2021-04-08 18:19:00
我想制作一个酒菜单程序,给出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)的情况下,它也显示“对不起,没有酒...”的消息。
查看完整描述

3 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

您缺少一个break语句或一个标志,表明您找到了结果。


另外,除了迭代外,range(len(wine))您还可以直接在酒单上进行迭代,该酒单每次迭代都会返回一个酒。这将使您的代码更具可读性,可维护性和效率:


wines_found = False

for w in wine:

    if wish_wine in w['Name']:

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

        wines_found = True


if 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。


查看完整回答
反对 回复 2021-04-20
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

您可以collections.defaultdict用来重组字典,以按酒名排序。仅当您要查找完全匹配的名称时,此方法才有效。


from collections import defaultdict


wine_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'))


查看完整回答
反对 回复 2021-04-20
  • 3 回答
  • 0 关注
  • 333 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信