Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.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 dict加法_Python_Python 2.7 - Fatal编程技术网

Python dict加法

Python dict加法,python,python-2.7,Python,Python 2.7,我有两个这样的口述 past = { '500188': { 2: {'S': 16.97011741552128, 'C': 16.97011741552128}, 3: {'S': -41.264072314989576, 'C': 'ERROR: reported_eps value not found for the year 2012.'}, 4: {'S': -40.45410186823402, 'C':

我有两个这样的口述

past = 
{
     '500188':
     {
         2: {'S': 16.97011741552128, 'C': 16.97011741552128},
         3: {'S': -41.264072314989576, 'C': 'ERROR: reported_eps value not found for the year 2012.'},
         4: {'S': -40.45410186823402, 'C': 'ERROR: reported_eps value not found for the year 2012.'}
     }, 
     '524715':
     {
         2: {'S': 46.21665549733925, 'C': 38.67504905630727},
         3: {'S': -32.729615295373385, 'C': -34.21172523465267},
         4: {'S': -22.25028773515787, 'C': -36.041635048402}
     },
     '513683':
     {
         2: {'S': 6.319158390481139, 'C': 6.319158390481139},
         3: {'S': 19.81072942574542, 'C': 19.81072942574542},
         4: {'S': 6.367182731764687, 'C': 'ERROR: reported_eps value not found for the year 2008.'}
     }
}

future =
{
    '500188':
    {
        2: {'S': 16.97011741552128, 'C': 16.97011741552128},
        3: {'S': -41.264072314989576, 'C': 'ERROR: reported_eps value not found for the year 2012.'},
        4: {'S': -40.45410186823402, 'C': 'ERROR: reported_eps value not found for the year 2012.'}
    }, 
    '524715':
    {
        2: {'S': 46.21665549733925, 'C': 38.67504905630727},
        3: {'S': -32.729615295373385, 'C': -34.21172523465267},
        4: {'S': -22.25028773515787, 'C': -36.041635048402}
    }
}
加上这些,我已经做到了

def _float(value):
    try: 
        return float(value)
    except ValueError:
        return 0


print {key: 
    {
        year: {
                _type: 
                (_float(past.get(key, {}).get(year, {}).get(_type, 0)) + _float(future.get(key, {}).get(year, {}).get(_type, 0)))/2  for _type in ['S', 'C']

        }for year in [4,3,2] #Second Loop

    }for key in set(past.keys()+future.keys()) #First Loop
}
得到了期望的输出

{
   '500188':
    {
       2: {'S': 16.97011741552128, 'C': 16.97011741552128},
       3: {'S': -41.264072314989576, 'C': 0},
       4: {'S': -40.45410186823402, 'C': 0}
    },
    '513683':
    {
       2: {'S': 3.1595791952405694, 'C': 3.1595791952405694},
       3: {'S': 9.90536471287271, 'C': 9.90536471287271},
       4: {'S': 3.1835913658823434, 'C': 0.0}
    },
   '524715':
    {
       2: {'S': 46.21665549733925, 'C': 38.67504905630727},
       3: {'S': -32.729615295373385, 'C': -34.21172523465267},
       4: {'S': -22.25028773515787, 'C': -36.041635048402}
    }
}
但是,应该有比这更好的解决方案,我在谷歌上搜索发现了类似的问题

但是这些值在顶层,但在我的例子中,这个值不在顶层,我必须做一个类型检查,并且必须计算平均值。解决这个问题的最好办法是什么


(Python 2.7版)

作为嵌套dict处理分层数据总是很痛苦的;您最好使用以下库:


非常好的解决方案,谢谢。我要学熊猫:-)。因此,如果我们要使用嵌套的dict,最好使用类似熊猫的库。“我说得对吗?”约翰帕温:是的,当然。
import pandas as pd, numpy as np
pp = pd.Panel(past).to_frame()
pf = pd.Panel(future).to_frame()
pp.replace('.', 0, regex=True) + pf.replace('.', 0, regex=True) / 2

                500188  513683     524715
major minor                              
C     2      25.455176     NaN  58.012574
      3       0.000000     NaN -51.317588
      4       0.000000     NaN -54.062453
S     2      25.455176     NaN  69.324983
      3     -61.896108     NaN -49.094423
      4     -60.681153     NaN -33.375432