Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python迭代字典并按类别求和总数_Python_Loops_Dictionary - Fatal编程技术网

用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真的是相当陌生,还没有探索过它……但现在我想我有一个很好的理由去探索它。非常感谢。