我有一本字典,每个字典包含两个数字。我需要将这些数字相乘,并保持字典中所有键的总和。我不断收到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)
答案 0 :(得分:3)
v1= c.get(k,v[0])
v2= c.get(k,v[1])
在这种情况下,v1
和v2
都被设置为v
。 c.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()
时,则不需要使用get
。 v
将是每次迭代中所需的数组。
答案 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())