迭代嵌套的字典在Python
我的字典的结构为这样:迭代嵌套的字典在Python
stockData = {
'AAPL': {
'beta': 1.01833975315094,
'company_name': 'Apple',
'dividend': 1.9341673320912078,
'total':300},
'GOOG': {
'beta': 1.01833975315094,
'company_name': 'Apple',
'dividend': 1.9341673320912078,
'total':300}
}
,这里是区,其中i值分配:
for row in range(2, sheet.max_row + 1):
# Each row in the spreadsheet has data for one census tract.
company_name = sheet['A' + str(row)].value
ticker = sheet['B' + str(row)].value
sector = sheet['C' + str(row)].value
shares = sheet['D' + str(row)].value
price = sheet['E' + str(row)].value
total = sheet['F' + str(row)].value
beta = sheet['G' + str(row)].value
dividend = sheet['H' + str(row)].value
number_stocks+=1
# Make sure the key for this ticker exists.
stockData.setdefault(ticker,{})
stockData[ticker]['company_name'] = company_name
stockData[ticker]['sector'] = sector
stockData[ticker]['shares'] = shares
stockData[ticker]['price'] = price
stockData[ticker]['total'] = total
stockData[ticker]['dividend'] = dividend
stockData[ticker]['beta'] = beta
我有一个问题在哪里我迭代使用for循环字典添加一个新的价值'百分比'这是'总'除以所有总计的所有股票的总和。
def get_portfolio_value(stocks,item):
portValue = 0
percentage = 0
for k, v in stocks.items():
portValue = portValue + v.get(item,0)
stockData[ticker]['percentage'] = stockData[ticker]['total']/portValue
print(portValue)
get_portfolio_value(stockData,'total')
的问题是,get_portfolio_value功能让我整个portValue总投资组合的,但在那里我试图投资组合的比例添加到每个股票行不工作右击 - 它仅仅出现在其中一只股票中的奇怪之处。有人可以建议吗?
如果我理解你的问题正确的话,你可以尝试如下(我只是复制了stockData
以下):
stockData = {
'AAPL': {
'beta': 1.01833975315094,
'company_name': 'Apple',
'dividend': 1.9341673320912078, 'total': 300},
'GOOG': {
'beta': 1.01833975315094,
'company_name': 'Apple',
'dividend': 1.9341673320912078, 'total': 300}}
我想这就是你的意思:
def get_portfolio_value(stocks, item='total'):
portValue = 0
for v in stocks.values():
portValue += v[item]
for k in stocks.keys():
stocks[k].update({'percentage': stocks[k]['total']/portValue})
print(portValue)
get_portfolio_value(stockData, 'total')
这是你想要什么:
stock_data = {
'AAPL': {'beta': 1.01833975315094, 'company_name': 'Apple', 'dividend': 1.9341673320912078, 'total':300},
'GOOG': {'beta': 1.01833975315094, 'company_name': 'Apple', 'dividend': 1.9341673320912078, 'total':300}
}
stock_sum = sum(stock_data[item]['total'] for item in stock_data)
for item in stock_data:
stock_data[item]['percentage'] = int((float(stock_data[item]['total'])/stock_sum) * 100)
结果:
>>> for item in stock_data:
... print stock_data[item]['percentage']
...
50
50
您的问题可以分为两个部分来解决:
-
以总库存的总和。对于您可以使用
sum()
为:stock_sum = sum(stock_data['total'] for stock_data in stockData.values())
-
遍历值来更新条目。既然你不需要
key
,使用dict.values()
遍历只值:for stock_data in stockData.values(): stock_data['percentage'] = stock_data['total']/stock_sum # ^Adds new key into your existing `dict` object
现在你stockData
字典的值保存附加键为percentage
这是完美的!奇迹般有效!非常感谢你,我仍然是Python的初学者,但是我非常感谢那些比我更聪明的人的建议。 –
不需要谢谢。如果你发现有用的答案,[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。这可能有助于未来面临同样问题的其他人 –
以下@jDo,在哪里呢'ticker'来自? – mikeqfu
@j对不起,我没有包含*代码,我从excel文件中读取并赋值。这个单引号只是我在这里输入代码时的一个错误。我刚刚编辑我的帖子以包含值分配。 –
有没有一种很好的方式来按“部门”来总结股票百分比?例如,以获得所有部门的名单,该部门的所有股票的百分比...... –