乘以字典中的项目清单

时间:2019-02-17 07:16:27

标签: python list dictionary

我有一本字典,每个字典包含两个数字。我需要将这些数字相乘,并保持字典中所有键的总和。我不断收到TypeError:

sub = v1 * v2
TypeError: can't multiply sequence by non-int of type 'list'

我试图将其强制转换为浮点数,但随后得到:

v1= float(c.get(k,v[0]))
TypeError: float() argument must be a string or a number, not 'list'

以下代码:

change = {'penny': [.01,57], 'nickel':[.05,34],'dime':[.1,42], 'quarter':  [.25,19],'half dallar':[.5,3],'one dollar bill':[1,24],'five dollar bill':[5,7],'ten dollar bill':[10,5],'twenty dollar bill':[20,3]}

def totalAmount(c):
   total = 0
   for k, v in c.items():
       v1= c.get(k,v[0])
       v2= c.get(k,v[1])

       sub = v1 * v2
       total = total + sub


totalAmount(change)
print("Total in petty cash: $" + total)

5 个答案:

答案 0 :(得分:3)

v1= c.get(k,v[0])
v2= c.get(k,v[1])

在这种情况下,v1v2都被设置为vc.get(i)返回c[i],因此c[k]自然会返回相应的值v。而是像这样拆分您的列表:

v1, v2 = v

答案 1 :(得分:2)

dict.get方法的第二个参数用于默认值,而不用于进一步的值检索。

相反,您可以像这样解压缩子列表的值:

for k, (v1, v2) in c.items():
    sub = v1 * v2
    total = total + sub

答案 2 :(得分:2)

尝试一下:

change = {'penny': [.01,57], 'nickel':[.05,34],'dime':[.1,42], 'quarter':  [.25,19],'half dallar':[.5,3],'one dollar bill':[1,24],'five dollar bill':[5,7],'ten dollar bill':[10,5],'twenty dollar bill':[20,3]}

def totalAmount(c):
   total = 0
   for k, v in c.items():
       sub = v[0] * v[1]
       total = total + sub
   return total


t = totalAmount(change)
print(t)

输出将为

181.72

,您的代码存在问题v1= c.get(k,v[0])。 如果要使用v1= c.get(k)[0],则应将其更改为get,但是当您使用.items()时,则不需要使用getv将是每次迭代中所需的数组。

答案 3 :(得分:1)

[change[key][0]*change[key][1] for key in change.keys()]

答案 4 :(得分:1)

total = sum(v1 * v2 for v1, v2 in change.values())