这里的问题很简单。我似乎无法得到如何解决它。
基本上,我在该商店库存数据中有一个包含多个元组的字典。
离。
portfolio = [('25-Jan-2001', 43.5, 25, 'CAT', 92.45),
('25-Jan-2001', 42.8, 50, 'DD', 51.19),
('25-Jan-2001', 42.1, 75, 'EK', 34.87),
('25-Jan-2001', 37.58, 100, 'GM', 37.58)]
我正在尝试打开包装并将购买价格乘以股票数量。最后将它们加在一起。
def total_purchase_price(portfolio):
purdate, purprice, numshares, sym, curprice = portfolio
totalprice = 0
for i in portfolio:
totalprice = purprice[i] * numshares[i]
print(totalprice)
return
但是,我得到一个ValueError:需要超过4个值来解压缩。
这是因为字符串不是整数吗?
任何帮助将不胜感激。感谢
答案 0 :(得分:2)
portfolio
是一个包含4个元组的列表。这行代码:
purdate, purprice, numshares, sym, curprice = portfolio
尝试将该列表解压缩为5个变量,但由于其中只有四个项目,因此失败。我怀疑你想要代码模式如下:
# iterate through the items in the portfolio
for item in portfolio:
# for each item, unpack the tuple into its constituent parts
purdate, purprice, numshares, sym, curprice = item
# ...do some calculations on those values
答案 1 :(得分:1)
bgporter的反应很好,可能就是你要找的东西。您最初将元组解压缩到自己的数组中的意图也是可以实现的:
def total_purchase_price(portfolio):
purdate, purprice, numshares, sym, curprice = zip(*portfolio)
totalprice = 0
for i in range(len(portfolio)):
totalprice = purprice[i] * numshares[i]
print(totalprice)
return
请注意,zip(* portfolio)基本上解压缩组合列,并在for循环中使用范围(len(portfolio))来获得正确的长度。结果:
1087.5
2140.0
3157.5
3758.0
我仍然更喜欢简单的@bgporter&可读性,但这种方法是可行的。
对于模型答案,我会这样做:
def total_purchase_price(portfolio):
def px(row):
purdate, purprice, numshares, sym, curprice = row
return purprice * numshares
print sum(map(px, portfolio))
答案 2 :(得分:1)
如果你想要总和,你可以在循环中使用 sum 函数解包:
def total_purchase_price(portfolio):
return sum(pp * sh for _, pp, sh, _, _ in portfolio)
或者将python3与extended iterable unpacking一起使用:
def total_purchase_price(portfolio):
return sum(pp * sh for _, pp, sh, *_ in portfolio)
或者,如果您喜欢功能,可以使用itertools.starmap
的一些运算符方法:
from operator import mul, itemgetter
from itertools import starmap
def total_purchase_price(portfolio):
return sum(starmap(mul, map(itemgetter(1,2), portfolio)))
答案 3 :(得分:0)
感谢@bgporter和@ F1Rumors !!
我对此的回答:
def total_purchase_price(portfolio):
totalprice = 0
totalpurprice = 0
for item in portfolio:
purdate, purprice, numshares, sym, curprice = item
totalprice += purprice * numshares
totalpurprice = totalprice
print(totalpurprice)
return
我可以使用@ F1Rumors的建议来减少它,但现在这样做了!