递归处理KeyError

时间:2014-02-25 08:03:26

标签: python dictionary

我想将键值的' - '递归设置为导致KeyError的键。

这是我的字典

Rojar = {
    '2010': {'fcf_share': '96.87', 'roce': '10.52', 'roic': '0', 'roe': '19.95', 
    'roa': '2.6'},
    '2011': {'fcf_share': '30.43', 'roce': '9.94', 'roic': '0', 'roe': 
    '26.48', 'roa': '2.76'}, 
    '2012': {'fcf_share': '75.54', 'roce': '11.84', 'roic': 
    '0', 'roe': '27.84', 'roa': '3.25'},
        }

与Rojar一样,超过500人拥有数据,但并非所有人都拥有这些数据。 我想从每个人那里获取每年对应的'roce','roe'和'roa'字段。 通过将人员代码解析为函数,我可以从

中获取值
Rojar = {k: {'roce': v['roce'], 'roe':v['roe'],'roa':v['roa']} for k, v in Rojar.iteritems()}

#it returns
    Rojar = {
    '2010': {'roce': '10.52','roe': '19.95', 'roa': '2.6'},
    '2011': {'roce': '9.94','roe': '26.48', 'roa': '2.76'}, 
    '2012': {'roce': '11.84','roe': '27.84', 'roa': '3.25'},
            }

但问题是每个人都可能没有这些价值观。 例如,如果Rojan没有“roce”对应于'2010'年,'roa'对应于'2012'年

#it has to return like 

    Rojar = {
    '2010': {'roce': '-','roe': '19.95', 'roa': '2.6'},
    '2011': {'roce': '9.94','roe': '26.48', 'roa': '2.76'}, 
    '2012': {'roce': '11.84','roe': '27.84', 'roa': '-'},
            }

感谢

1 个答案:

答案 0 :(得分:3)

使用dict.get方法:

Rojar = {k: {'roce': v.get('roce','-'),
             'roe': v.get('roe','-'),
             'roa': v.get('roa','-')}
        for k, v in Rojar.iteritems()}

这样,如果字典v没有给定的密钥,则该值将默认为' - '。