定义一个函数,从字典中的列表中查找ID并对值求和

2024-09-30 22:27:39 发布

您现在位置:Python中文网/ 问答频道 /正文

这个函数的目标是输出订单的总成本。你知道吗

我有一个函数,它给了我一个类似于{'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字典:prices和商品ID列表传递给lookup,它会输出列表中所有商品的总成本。所以对于上面的例子,它应该输出值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

Tags: 项目函数id列表getdictionary字典价格
2条回答

get()返回None如果找不到该项,顺便说一句,您可以将第二个可选参数传递给get()。因此,如果没有找到id,那么返回该参数

>>> 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.

列表[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}

相关问题 更多 >