2017-03-28 14 views
-2

しかし、ネストされた辞書の多くの例が出てきましたが、私はこれを解読できません!以下はjson形式で入力し、私の望む出力は以下のようになります。 入力ディクショナリには100以上のエントリがあり、選択された変数のほんの一部(IPアドレス、Med、Activeなど)の値を抽出したいと考えています。Pythonは複雑なネストされた辞書とリストから値を抽出します

いくつかのエントリ 'のmed' のリスト内にネストされている[0,1,2等]

MED = BGP ['10 .0.0.0/16 '] [' bgpRoutePaths'] [0]。 ( 'のmed')を取得
MED = BGP ['10 .0.0.0/16 '] [' bgpRoutePaths '] [1]に.get(' のmed ')

Input: 

    {u'10.0.0.0/16': {u'address': u'10.0.0.0', 
          u'bgpAdvertisedPeerGroups': {}, 
          u'bgpRoutePaths': [{u'asPathEntry': {u'asPath': u'65404,65315 i',    
                   u'asPathType': None}, 
               u'localPreference': 100, 
               u'med': 0, 
               u'nextHop': u'172.1.1.169', 
               u'routeType': {u'active': True, 
                  u'atomicAggregator': False, 
                  u'backup': False, 
                  u'ecmp': False, 
                  u'ecmpContributor': False, 
                  u'ecmpHead': False, 
                  u'queued': False, 
                  u'stale': False, 
                  u'suppressed': False, 
                  u'ucmp': False, 
                  u'valid': True}, 
               u'weight': 0}, 
              {u'asPathEntry': {u'asPath': u'65407 65315 65317 65000 i', 
                   u'asPathType': None}, 
               u'localPreference': 100, 
               u'med': 0, 
               u'nextHop': u'172.16.1.94', 
               u'routeType': {u'active': False, 
                  u'atomicAggregator': False, 
                  u'backup': False, 
                  u'ecmp': False, 
                  u'ecmpContributor': False, 
                  u'ecmpHead': False, 
                  u'queued': False, 
                  u'stale': False, 
                  u'suppressed': False, 
                  u'ucmp': False, 
                  u'valid': True}, 
               u'weight': 0}], 
          u'maskLength': 16}, 
} 

出力:

IPaddr   asPath        med active 
10.0.0.0/16 (65404 65315 i)      0 True 
10.0.0.0/16 (65407 65315 65317 65000 i)   0 False 
+0

実際の問題は何ですか? – Olaia

答えて

0

「」は、あなたが、私はこれを自分で解決することができた

print a.keys()[0] 
print a['10.0.0.0/16']['bgpRoutePaths'][0]['asPathEntry']['asPath'], ' ', a['10.0.0.0/16']['bgpRoutePaths'][0]['med'], ' ', a['10.0.0.0/16']['bgpRoutePaths'][0]['routeType']['active'] 


print a['10.0.0.0/16']['bgpRoutePaths'][1]['asPathEntry']['asPath'], ' ', a['10.0.0.0/16']['bgpRoutePaths'][1]['med'], ' ', a['10.0.0.0/16']['bgpRoutePaths'][1]['routeType']['active'] 
0

でデータにアクセスできる変数として辞書を考えてみましょう!

for k,v in a.iteritems(): 
    add = k 
    for i in range (0,len(a.values()[0]['bgpRoutePaths'])): 
    aspath = a.values()[0]['bgpRoutePaths'][i]['asPathEntry'].get('asPath') 
    active = a.values()[0]['bgpRoutePaths'][i]['routeType'].get('active') 
    print add,aspath,med,active 

Output: 
10.0.0.0/16 65404,65315 i 0 True 
10.0.0.0/16 65407 65315 65317 65000 i 0 False 
関連する問題