python - Python中键值对的排列
问题描述
在我陈述我的问题之前,我希望知道我搜索了以前的堆栈溢出问题,例如这个Python permutation,但它们没有解决我的具体问题。
假设我有一本关于水果及其成本的字典以及预算。
items = {'Apple': 1, 'Pear': 3, 'Orange': 2, 'Banana' : 4, 'Grape' : 3, 'Melon': 5, 'Lemon': 1}
budget = 10
我想创建一些可以输出我可以购买的所有可能项目组合的东西。但是,必须制定以下规则:
- 每种水果我只能买 1 个
- 我必须买4个水果,不多不少
- 顺序无所谓。(即我不输出 [Apple Pear Orange Banana] 和 [Pear Apple Banana Orange],因为它们是相同的)
- 我必须保持在预算范围内。剩下的钱很好(如果有办法退回有多少剩余的钱,那就太酷了),但我不能超过 10。
我遵循了基本排列的示例并弄清楚了这一点,但我似乎无法弄清楚如何使用键值对和“预算”来做到这一点。任何帮助表示赞赏。谢谢!
解决方案
- 为方便起见,创建一个元组列表,例如 [ (Apple, 1), (Banana, 2) ]
- 创建所有 4 元组组合
- 只留下那些总和低于预算的人。
items = {'Apple': 1, 'Pear': 3, 'Orange': 2, 'Banana' : 4, 'Grape' : 3, 'Melon': 5, 'Lemon': 1}
budget = 10
tuples = items.items()
combos = list(itertools.combinations(tuples, 4))
combos_under_budget = [ t for t in combos if sum(p[1] for p in t) <= budget ]
combos_under_budget
>>> [(('Apple', 1), ('Pear', 3), ('Orange', 2), ('Banana', 4)),
(('Apple', 1), ('Pear', 3), ('Orange', 2), ('Grape', 3)),
(('Apple', 1), ('Pear', 3), ('Orange', 2), ('Lemon', 1)),
(('Apple', 1), ('Pear', 3), ('Banana', 4), ('Lemon', 1)),
(('Apple', 1), ('Pear', 3), ('Grape', 3), ('Lemon', 1)),
(('Apple', 1), ('Pear', 3), ('Melon', 5), ('Lemon', 1)),
(('Apple', 1), ('Orange', 2), ('Banana', 4), ('Grape', 3)),
(('Apple', 1), ('Orange', 2), ('Banana', 4), ('Lemon', 1)),
(('Apple', 1), ('Orange', 2), ('Grape', 3), ('Lemon', 1)),
(('Apple', 1), ('Orange', 2), ('Melon', 5), ('Lemon', 1)),
(('Apple', 1), ('Banana', 4), ('Grape', 3), ('Lemon', 1)),
(('Apple', 1), ('Grape', 3), ('Melon', 5), ('Lemon', 1)),
(('Pear', 3), ('Orange', 2), ('Banana', 4), ('Lemon', 1)),
(('Pear', 3), ('Orange', 2), ('Grape', 3), ('Lemon', 1)),
(('Orange', 2), ('Banana', 4), ('Grape', 3), ('Lemon', 1))]
推荐阅读
- sql - 字符串“Catch Fry's Low Impact”后的非闭合引号
- python - 将字典转换为具有波斯字符的 json
- javascript - 将 javascript 变量升级到全局范围
- java - 使用 apache poi 获取最后一行值
- python - Windows 中的 Anaconda 和 Git Bash - conda: command not found
- python - 以 10 为基数的 int() 的无效文字:''
- javascript - 获取请求的 400(错误请求),其参数是 url
- angular - 如何使用使用的 Angular 材质为 DatePicker 添加 FormValidation?
- reactjs - 从 API 获取数据的本机反应取决于动态 id
- python - 如何在请求中有 unicode 纯文本?