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

时间:2012-09-30 18:52:09

标签: python function dictionary

此功能的目标是输出订单的总成本。

我有一个函数可以给我一个像{'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购买项目3中的1个。

我想定义一个函数,让我传递项目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

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分:2)

你的列表[2,2,3]包含整数,但你的dict的键是字符串。我建议你使用int键和float值来创建你的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}