用Python迭代字典并按类别求和总数
这个问题与本帖相关: 作为后续工作,我尝试将所有股票的总数相加,并获得按部门划分的投资组合中股票的总百分比 我希望输出如下所示:用Python迭代字典并按类别求和总数,python,loops,dictionary,Python,Loops,Dictionary,这个问题与本帖相关: 作为后续工作,我尝试将所有股票的总数相加,并获得按部门划分的投资组合中股票的总百分比 我希望输出如下所示: stockData = { 'AAPL': { 'beta': 1.01833975315094, 'company_name': 'Apple', 'dividend': 1.9341673320912078, 'total':300 'sector': 'Technolog
stockData = {
'AAPL': {
'beta': 1.01833975315094,
'company_name': 'Apple',
'dividend': 1.9341673320912078,
'total':300
'sector': 'Technology},
'GOOG': {
'beta': 1.01833975315094,
'company_name': 'Apple',
'dividend': 1.9341673320912078,
'total':300
'sector':Technology}
}
for stock_data in stockData.values():
stock_data['percentage'] = stock_data['total']/stock_sum
技术:24%,财务:14%,等等
我的字典是这样的:
stockData = {
'AAPL': {
'beta': 1.01833975315094,
'company_name': 'Apple',
'dividend': 1.9341673320912078,
'total':300
'sector': 'Technology},
'GOOG': {
'beta': 1.01833975315094,
'company_name': 'Apple',
'dividend': 1.9341673320912078,
'total':300
'sector':Technology}
}
for stock_data in stockData.values():
stock_data['percentage'] = stock_data['total']/stock_sum
我已经计算了每只股票在整个投资组合中的总百分比,如下所示:
stockData = {
'AAPL': {
'beta': 1.01833975315094,
'company_name': 'Apple',
'dividend': 1.9341673320912078,
'total':300
'sector': 'Technology},
'GOOG': {
'beta': 1.01833975315094,
'company_name': 'Apple',
'dividend': 1.9341673320912078,
'total':300
'sector':Technology}
}
for stock_data in stockData.values():
stock_data['percentage'] = stock_data['total']/stock_sum
我正试图按部门获得%的总数,但就是不起作用。。。。我试过这个
for stock_data in stockData.values():
sector_totals = []
for stock_data['sector'] in stock_data:
sector_totals = (stock_data['sector'], stock_data['percentage'])
有什么建议吗?你可以反复浏览你的
股票数据
创建一个部门
字典,收集该部门的所有总计:
sectors = {}
for stock in stockData.values():
sectors.setdefault(stock['sector'], []).append(stock['total'])
print(sectors)
# {'Technology': [300, 300]}
然后您可以在stockData
上迭代添加百分比
:
for stock in stockData.values():
stock['percentage'] = stock['total']/sum(sectors[stock['sector']])
注意:在py2中,您必须将其中一个设置为float
,例如float(股票['total'))
或者,您可以为扇区
字典创建一个运行总计,这样可以避免上面的sum()
:
sectors = {}
for stock in stockData.values():
sectors[stock['sector']] = sectors.get(stock['sector'], 0) + stock['total']
print(sectors)
# {'Technology': 600}
您可以迭代您的
股票数据
创建一个部门
字典,收集该部门的所有总计:
sectors = {}
for stock in stockData.values():
sectors.setdefault(stock['sector'], []).append(stock['total'])
print(sectors)
# {'Technology': [300, 300]}
然后您可以在stockData
上迭代添加百分比
:
for stock in stockData.values():
stock['percentage'] = stock['total']/sum(sectors[stock['sector']])
注意:在py2中,您必须将其中一个设置为float
,例如float(股票['total'))
或者,您可以为扇区
字典创建一个运行总计,这样可以避免上面的sum()
:
sectors = {}
for stock in stockData.values():
sectors[stock['sector']] = sectors.get(stock['sector'], 0) + stock['total']
print(sectors)
# {'Technology': 600}
有什么理由不使用熊猫吗? 这会让你的生活更轻松 我添加了一个额外的(假的)库存,以使示例更加相关
stockData = {
'AAPL': {
'beta': 1.01833975315094,
'company_name': 'Apple',
'dividend': 1.9341673320912078,
'total':300,
'sector': 'Technology'},
'GOOG': {
'beta': 1.01833975315094,
'company_name': 'Apple',
'dividend': 1.9341673320912078,
'total':300,
'sector':'Technology'},
'XXXX': {
'beta': 1.01833975315094,
'company_name': 'Apple',
'dividend': 1.9341673320912078,
'total':300,
'sector':'Food'}
}
import pandas as pd
# Create pandas dataframe wi
stockData_df = pd.DataFrame(stockData).T
stockData_df['percentage'] = stockData_df['total']/stockData_df['total'].sum()
stockData_df
Out[82]:
beta company_name dividend sector total percentage
AAPL 1.01834 Apple 1.93417 Technology 300 0.333333
GOOG 1.01834 Apple 1.93417 Technology 300 0.333333
XXXX 1.01834 Apple 1.93417 Food 300 0.333333
sector_totals = stockData_df.groupby('sector').sum()['total']/stockData_df['total'].sum()
sector_totals
Out[86]:
sector
Food 0.333333
Technology 0.666667
Name: total, dtype: float64
有什么理由不使用熊猫吗? 这会让你的生活更轻松 我添加了一个额外的(假的)库存,以使示例更加相关
stockData = {
'AAPL': {
'beta': 1.01833975315094,
'company_name': 'Apple',
'dividend': 1.9341673320912078,
'total':300,
'sector': 'Technology'},
'GOOG': {
'beta': 1.01833975315094,
'company_name': 'Apple',
'dividend': 1.9341673320912078,
'total':300,
'sector':'Technology'},
'XXXX': {
'beta': 1.01833975315094,
'company_name': 'Apple',
'dividend': 1.9341673320912078,
'total':300,
'sector':'Food'}
}
import pandas as pd
# Create pandas dataframe wi
stockData_df = pd.DataFrame(stockData).T
stockData_df['percentage'] = stockData_df['total']/stockData_df['total'].sum()
stockData_df
Out[82]:
beta company_name dividend sector total percentage
AAPL 1.01834 Apple 1.93417 Technology 300 0.333333
GOOG 1.01834 Apple 1.93417 Technology 300 0.333333
XXXX 1.01834 Apple 1.93417 Food 300 0.333333
sector_totals = stockData_df.groupby('sector').sum()['total']/stockData_df['total'].sum()
sector_totals
Out[86]:
sector
Food 0.333333
Technology 0.666667
Name: total, dtype: float64
顺便说一句:上面的字典无效,缺少引号和逗号。顺便说一句:上面的字典无效,缺少引号和逗号。这非常有用。我可以这样试试。我对Python真的是相当陌生,还没有探索过它……但现在我想我有一个很好的理由去探索它。非常感谢。这真的很有帮助。我可以这样试试。我对Python真的是相当陌生,还没有探索过它……但现在我想我有一个很好的理由去探索它。非常感谢。