2017-09-26 62 views
0

我得到Openstack nova API的输出。无法从嵌套字典中获取密钥

{ 
    "u'zoneState": { 
     "u'available": True 
    }, 
    "u'hosts": { 
     "u'compute-1": { 
      "u'nova-compute": { 
       "u'available": True, 
       "u'active": True, 
       "u'updated_at": 
       "u'2017-09-26T10": 
       "04": 49.000000' 
      } 
     }, 
     "u'compute-2": { 
      "u'nova-compute": { 
       "u'available": True, 
       "u'active": True, 
       "u'updated_at": 
       "u'2017-09-26T10": 
       "04": 48.000000' 
      } 
     } 
    }, 
    "u'zoneName": u'nova' 
} 

我正在编写python脚本来获取可用区中的计算节点详细信息。

我能够得到主机名,但我想获取主机状态"u'available": True,"u'active": True,,但我并没有能够得到的键形式字典。

任何帮助,将不胜感激。

回答

1

试试这个:

for host_key in d["u'hosts"].keys(): 
    for key in d["u'hosts"][host_key]: 
     print d["u'hosts"][host_key][key].get("u'active") 

这将打印您所需的值

+0

感谢您的答复。然而,它总是扔'None'。 '>>>用于your_dictionary [ '主机'] host_key键(): ...打印your_dictionary [ '主机'] [host_key]获得( '激活') ... None' – tgcloud

+0

见更新的答案 – ddor254

0
for x in openstack_dict["u'hosts"].iterkeys(): 
    if len(openstack_dict["u'hosts"][x]) > 0: 
     for y in openstack_dict["u'hosts"][x].iterkeys(): 
      if len(openstack_dict["u'hosts"][x][y]) > 0: 
       for z in openstack_dict["u'hosts"][x][y].iterkeys(): 
        print x,':',y,':',z,':', openstack_dict["u'hosts"][x][y][z] 
      else: 
       print openstack_dict["u'hosts"][x] 
    else: 
     print openstack_dict["u'hosts"]