从函数输出创建一个列表?

时间:2013-07-25 10:59:07

标签: python list dictionary matplotlib

我正在建立一个财务模型,并坚持模型的最后一点,我必须从函数的输出生成图形。下面是我的最后一个函数,我没有把其他函数作为它们的代码非常大。 该模型显示了(客户,订单,网络等)每年如何针对不同的客户类型进化。因此,如果运行我的功能说客户类型12,它将从第1天开始运行到第365天,显示客户或其他东西如何增长。

def show_all_states_list(cust_type):
    s  = get_state0(cust_type)    
    all_states =[]
    for day in range(365):
        s = state_evolution(s, cust_type)
        all_states.append(s)
    return all_states

当我在python中运行时,第1天的此函数输出(不包括所有输出):

s = show_all_states_list(12)
>>> s[0]
{'day': 1,'custtypeA_nondp': 50.99574423351457,'delfeeA_dp_cost': 0.45111124745572373, 'today_ordersA_nondp':0,'profit_current_vs_with_dp ': -5.4141382286616135, 'gross_profit_nondp_dp': 35441.52120017628, 'fixed_costs_nondp_dp ': -56407.52069653516, 'combine_nondp_dp_profit': -5642.694138228653, 'today_netsalesA_nondp': 0, 'gross_turnover_dp_nondp_cust': 142363.5991835414, 'del_nondp_dp_turnover': 28036.11144103729, 'var_costs_nondp_dp': -12712.806082907056, 'custtypeA_dp': 0.004255766485431356, 'ordersA_dp': 0.4080111809905219, 'netsalesA_nondp': 114327.45898877166, 'ordersA_nondp': 4444.629080744554, 'today_delfeeA_nondp': 0, 'delfeeA_nondp': 28035.660329789833, 'totords_dp_nondp': 4445.037091925545,  'today_ordersA_dp': 0, 'gross_turnover_dp_cust': 0.4798649799246596, 'decreased_bsktsize_dp': 0.07047290321586513, 'custtypeA': 51.0, 'net_turnover_dp': 0.028753732468935884, 'current_vs_dp_gross_sales': -11.400816458597546}

我想要的是,从所有365天的输出中取出每个关键值,例如'custtypeA_nondp'(所以我将365值为此)并将其放入一个新列表,以便我可以得到一个天的情节反对'custtypeA_nondp',它将以图形方式显示我的输出。

我知道如何绘制散点图,但不知道如何从函数输出中提取信息。

我真的很感激这方面的帮助。

2 个答案:

答案 0 :(得分:1)

all_states = show_all_states_list(12)
typeAs = [d['custtypeA_nondp'] for d in all_states]

或者使用operator.itemgetter()

from operator import itemgetter

typeAs = map(itemgetter('custtypeA_nondp'), all_states)

答案 1 :(得分:0)

词典有一个方便的values()方法,可以满足你的需要:

>>> d = {'day': 1,'custtypeA_nondp': 50.99574423351457,'delfeeA_dp_cost': 0.45111124745572373}
>>> d.values()
[0.45111124745572373, 1, 50.995744233514571]

补码是keys()方法:

>>> d.keys()
['delfeeA_dp_cost', 'day', 'custtypeA_nondp']

您的方法返回一个字典列表,因此如果只想在返回的列表中包含所有字典的custtypeA_nondp列表:

vals = list(x['custtypeA_nondp'] for x in s)