优化Python字典的输出

3

我在解决一个编程难题时遇到了很大的困难。我有一个字典,其中包含项(用i#表示),并将价格作为该项的价值。这些项可以组合成组合套餐。

{('i2', 'i3'): '4', ('i1',): '1',('i1', 'i3', 'i4'): '6.5', ('i3',): '3',('i1', 'i2', 'i3'): '4.5', ('i2',): '2', ('i4',): '4'}

我希望能够返回给定输入项目的最低价格。如果用户从组合套餐中获得额外的物品并以最低价格购买,则不会有任何问题:

  1. 对于输入i1,应返回价格1。(这是所有i1项目的最低价格)
  2. 对于输入(i1,i2),应返回3。
  3. 对于输入(i1,i2,i3,i4),应返回8.5
  4. 对于输入(i1,i1,i2,i3,i4),应返回9.5

有没有人知道如何进行?使用哪种算法?

谢谢, Sunil

1个回答

2
使用itertools.combinations()生成x个包裹的组合。然后,检查每个组合是否包含所需的物品,并找到价格最低的有效组合。
要找到4个不同物品包裹的所有组合:
d = {('i2', 'i3'): '4', ('i1',): '1',('i1', 'i3', 'i4'): '6.5', ('i3',): '3',
     ('i1', 'i2', 'i3'): '4.5', ('i2',): '2', ('i4',): '4'}
from itertools import combinations
combos = list(combinations(d, 4)) # you should try combos of different lenghts, 
                                  # from 1 to the number of desired items

举个例子,让我们来看一下其中的一个组合。 print combos [0] 的输出结果为:
(('i2', 'i3'),('i1',),('i1','i3','i4'),('i3',))

要获取此组合的价格:

sum([float(d[item]) for item in combos[0]])

这个可以得出14.5。

我将让您自行寻找最便宜的合适组合:)


谢谢你的回答。我会尝试你的方法并及时向你更新。目前还在苦思冥想,不知道该从哪里开始 :-) - SRC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接