0

我对这个函数的目标是输出订单的总成本。

我有一个函数可以给我一个字典{'2': '150.99', '3': '99.50', '15': '5.07'},比如第一个值是 ID 号,第二个值是具有该 ID 号的商品的价格。因此,第 3 项商品的价格为 99 美元/欧元/英镑/无论我的单位是什么,以及 50 美分/子单位。

另一个函数为我提供了一个项目 ID 列表,以便像这样查找,[2, 2, 3]其中任何项目 ID 都可以出现多次,以表明我购买了多个该项目。因此,在本例中,我将以 150.99 的价格购买 2 件商品 2,并以 99.50 的价格购买 1 件商品 3。

我想定义一个函数,让我将项目 ID 的字典传递给它:价格和要查找的项目 ID 列表,它将输出列表中所有项目的总成本。所以对于上面的例子,它应该输出值401.48,因为(2*150.99)+99.50=401.48.

作为我尝试过的测试

test = DictionaryVariable.get('2')
print test

这将打印预期值(因此在本例中为 150.99。)

但是,我尝试定义一个函数

def FindPrice(dictionary, idlist):
    price = 0.00
    for id in idlist:
        price + float(dictionary.get(id))
    return price

然后这样称呼它:

Prices = FindPrice(DictionaryVariable, IDListVariable)
print Prices

没有工作 - 该dictionary.get(id)部分似乎正在返回None(我已经通过将其设为 str 而不是 float 进行了测试),因此它会引发错误,指出“TypeError:float() 参数必须是字符串或数字”。我怀疑我需要使用其他方法从列表中输入项目 ID,但我不知道该方法是什么。我不知道为什么会有dictionary.get(id)回报None,但DictionaryVariable.get('2')给了它我期望的价值。

编辑:感谢那些指出我在字典中使用字符串而不是整数或浮点数的有用帖子,我得到了这个工作:

def FindPrice(dictionary, idlist):
    Price = sum(float(dictionary.get(x,0)) for x in idlist)
    return Price
Prices = FindPrice(DictionaryVariable, FunctionThatMakesListofIDs('FileToGetIDsFrom.xml'))
print Prices
4

2 回答 2

2

get()None如果找不到该项目,则返回,顺便说一句,您可以将第二个可选参数传递给get(). 因此,现在如果id找不到,则返回该参数。(在您的情况下传递 0)

>>> dic={'2': '150.99', '3': '99.50', '15': '5.07'}
>>> items= ['2', '2', '3'] 
>>> sum(float(dic.get(x,0)) for x in items)  #pass 0 to get in case id is not there
401.48

help(dict.get)

get(...)
    D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.
于 2012-09-30T18:55:41.440 回答
2

您的列表 [2, 2, 3] 包含整数,但您的 dict 的键是字符串。我建议您首先使用 int 键和浮点值创建您的 dict,或者像这样转换它:

>>> d = {'2': '150.99', '3': '99.50', '15': '5.07'}
>>> d = dict((int(k),float(v)) for k, v in d.iteritems())
>>> d
{2: 150.99000000000001, 3: 99.5, 15: 5.0700000000000003}
于 2012-09-30T18:55:44.560 回答