首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对于另一个字典中的字典,如何根据值对其进行排序,并比较字典中的不同项

对于另一个字典中的字典,如何根据值对其进行排序,并比较字典中的不同项
EN

Stack Overflow用户
提问于 2016-04-30 23:51:45
回答 1查看 47关注 0票数 2

我正在尝试创建一个功能,将促销应用于一个篮子(如超市),篮子中的每个项目都有一个组号,因此某些项目可以让促销应用,例如我的篮子字典是:

代码语言:javascript
运行
复制
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,
 },
...
}

如何比较字典中的每一项,即另一项可能有不同的组号来进行促销。你是如何按价格分类这本词典的?因此,促销是适用于最便宜的项目。

目前我有

代码语言:javascript
运行
复制
amount = 0
for ident in basket:
if basket[ident]['group']==4:
    amount = amount + basket[ident]['amount']

amountPayable = amount - amount//4

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-01 00:22:19

您可以用生成器表达式编写原始代码,返回所有产品( group == 4 )。

代码语言:javascript
运行
复制
sum(v['amount'] for v in basket.values() if v['group'] == 4) # 8

正如评论所提到的,字典没有排序,所以你无法对它们进行排序。也就是说,您可以将字典中的值排序为列表:

代码语言:javascript
运行
复制
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'}

请注意,如果您只需要最便宜的产品,则不必对值进行排序:

代码语言:javascript
运行
复制
min(basket.values(), key=lambda x: x['price']) # {'group': 4, 'name': 'Brisket Beef 400G', 'price': 3.5, 'amount': 3, 'promotion': 'get4pay3', 'unit': 'pieces'}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36961511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档