我如何使用float来转换字典中的值字符串并使用新值进行数学运算?

时间:2013-07-19 03:55:43

标签: python dictionary

我正在尝试使用codeacademy学习python,并且任务是采用两个给定的词典(一个是食物和购买价格列表+第二个是相同食物的列表,但库存量)并计算如果所有食品都卖出我将获得多少收入。

起初,我收到此错误消息"can't multiply sequence by non-int of type 'list'"。我认为这很奇怪,因为我调用的值是数字? o_O但没关系,然后我尝试使用float函数转换字符串(在我计算时使用float(quan)float(cost))。但是,我会得到这个错误:"TypeError: float() argument must be a string or a number" 我还尝试通过执行float(prices.value())进行转换,但也会提供相同的错误消息。 我认为错误在于我如何使用float函数而不是循环因为我试图打印出只有成本和quan并且输出看起来正常。

我非常感谢你的帮助。

 prices = {
     "banana": 4,
     "apple": 2, 
     "orange": 1.5, 
     "pear": 3, 
 }
 name, cost = prices.keys(), prices.values()    
 stock = {
     "banana": 6,
     "apple": 0,
     "orange": 32,
     "pear": 15
 }
 items, quan = stock.keys(), stock.values()
 for name, cost in prices.iteritems():
    print float(cost) * float(quan)

编辑:还有,有一个函数可以对循环求和吗?因为我应该找到一个单一的最终价值,如果一切都卖

3 个答案:

答案 0 :(得分:1)

一种方法是仅循环键:

for key in prices:
    if key in stock:
        print(prices[key] * stock[key])

虽然在你的情况下两个词典都有相同的键,但我添加了一个条件来检查prices中的每个键是否也在stock中。然后,假设它是,将字典值相乘。


总结所有值,

print(sum(prices[key] * stock[key] for key in prices))

如果您希望包含条件,

print(sum(prices[key] * stock[key] for key in prices if key in stock))

或者如果您喜欢多行:

total = 0

for key in prices:
    total += prices[key] * stock[key]

print(total)

答案 1 :(得分:1)

costquan都是列表,无法传递给float。我怀疑为什么你让解决方案变得复杂。你可以使用:

for fruit in prices:
    print prices[fruit] * stock.get(fruit, 0)

或者如果你愿意,你可以使用字典理解来使结果更清晰:

{fruit: prices[fruit]*stock.get(fruit, 0) for fruit in prices}

答案 2 :(得分:0)

您正在将quan设置为dict中所有值的列表。那不是你想要的;您正在寻找与name对应的单个值作为关键字。