2014-02-25 135 views
0

我想將鍵值設置爲' - ',以遞歸方式導致KeyError的鍵。遞歸處理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': '-'}, 
      } 

感謝

+2

使用'v.get('roce','some-default-value')''怎麼辦? – andrean

回答

3

使用dict.get方法:

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

這樣,如果字典v沒有給定的鍵,則該值將默認爲' - '。