我正在尝试创建一个功能,将促销应用于一个篮子(如超市),篮子中的每个项目都有一个组号,因此某些项目可以让促销应用,例如我的篮子字典是:
basket = {
'10015' : {
'name' : 'Diced Beef 400G',
'price' : 4.50,
'unit' : 'pieces',
'promotion' : 'get4pay3',
'group' : 4,
'amount' : 5,
},
'10017' : {
'name' : 'Brisket Beef 400G',
'price' : 3.50,
'unit' : 'pieces',
'promotion' : 'get4pay3',
'group' : 4,
'amount' : 3,
},
...
}
如何比较字典中的每一项,即另一项可能有不同的组号来进行促销。你是如何按价格分类这本词典的?因此,促销是适用于最便宜的项目。
目前我有
amount = 0
for ident in basket:
if basket[ident]['group']==4:
amount = amount + basket[ident]['amount']
amountPayable = amount - amount//4
谢谢
发布于 2016-05-01 00:22:19
您可以用生成器表达式编写原始代码,返回所有产品( group == 4
)。
sum(v['amount'] for v in basket.values() if v['group'] == 4) # 8
正如评论所提到的,字典没有排序,所以你无法对它们进行排序。也就是说,您可以将字典中的值排序为列表:
s = sorted(basket.values(), key=lambda x: x['price'])
s[0] # {'group': 4, 'name': 'Brisket Beef 400G', 'price': 3.5, 'amount': 3, 'promotion': 'get4pay3', 'unit': 'pieces'}
请注意,如果您只需要最便宜的产品,则不必对值进行排序:
min(basket.values(), key=lambda x: x['price']) # {'group': 4, 'name': 'Brisket Beef 400G', 'price': 3.5, 'amount': 3, 'promotion': 'get4pay3', 'unit': 'pieces'}
https://stackoverflow.com/questions/36961511
复制相似问题