我试着做一个简单的标题,但我对这个有点迷失。
我正在使用python模块Python-HPILO来收集HP Blades上的硬盘驱动器磁盘和DIMM详细信息等信息,这是有效的。
示例:
import hpilo
ilo = hpilo.Ilo('10.0.0.1', 'USER', 'PASSWORD')
health = ilo.get_embedded_health()
logical_drives = (health['storage']['Controller on System Board']['logical_drives'])
print(logical_drives)
结果(匿名):
[{**'label': '01', 'status': 'OK', 'capacity': '419 GiB', 'fault_tolerance': 'RAID 1/RAID 1+0', 'logical_drive_type': 'Data LUN', 'encryption_status': 'Not Encrypted', 'physical_drives': **[{**'label': 'Port 1I Box 1 Bay 1', 'status': 'OK', 'serial_number': 'SXXXXXXXX', 'model': 'YYYYYY', 'capacity': '419 GiB', **'marketing_capacity': '450 GB'**, 'location': 'Port 1I Box 1 Bay 1', 'fw_version': 'HPD9', 'drive_configuration': 'Configured', 'encryption_status': 'Not Encrypted', 'media_type': 'HDD'**}**, {'label': 'Port 1I Box 1 Bay 2', 'status': 'OK', 'serial_number': 'SXXXXXX', 'model': 'YYYYYY', 'capacity': '419 GiB', 'marketing_capacity': '450 GB', 'location': 'Port 1I Box 1 Bay 2', 'fw_version': 'HPD9', 'drive_configuration': 'Configured', 'encryption_status': 'Not Encrypted', 'media_type': 'HDD'**}]}]
我想收集marketing_capacity的价值,这里是450GB。我发现了一些与列表或词典中的入侵性搜索有关的其他主题,但是我无法使用这个特定列出的列出的dictonary-dictonary事件。
有没有人有这种清单进行研究的简单方法/功能?
答案 0 :(得分:2)
您可以通过
访问该变量logical_drives[0]['physical_drives'][0]['marketing_capacity']
'450 GB'
如果字典的嵌套发生变化,您可以打开列表中的列表和字典,然后提取所需的值
val ='marketing_capacity'
def unwrap(dic):
temp = {}
for i in dic:
if type(i) in [list, dict]: temp.update(unwrap(i))
elif type(dic[i]) in [list, dict]: temp.update(unwrap(dic[i]))
else: temp.update({i: dic[i]})
return temp
temp = [{'label': '01', 'status': 'OK', 'capacity': '419 GiB', 'fault_tolerance': 'RAID 1/RAID 1+0', 'logical_drive_type': 'Data LUN', 'encryption_status': 'Not Encrypted', 'physical_drives': [{'label': 'Port 1I Box 1 Bay 1', 'status': 'OK', 'serial_number': 'SXXXXXXXX', 'model': 'YYYYYY', 'capacity': '419 GiB', 'marketing_capacity': '450 GB', 'location': 'Port 1I Box 1 Bay 1', 'fw_version': 'HPD9', 'drive_configuration': 'Configured', 'encryption_status': 'Not Encrypted', 'media_type': 'HDD'}, {'label': 'Port 1I Box 1 Bay 2', 'status': 'OK', 'serial_number': 'SXXXXXX', 'model': 'YYYYYY', 'capacity': '419 GiB', 'marketing_capacity': '450 GB', 'location': 'Port 1I Box 1 Bay 2', 'fw_version': 'HPD9', 'drive_configuration': 'Configured', 'encryption_status': 'Not Encrypted', 'media_type': 'HDD'}]}]
x = unwrap(temp)
x['marketing_capacity']
答案 1 :(得分:2)
列表中的字典没有什么特别之处。您已经知道如何查找嵌套值 - 只需继续相同的原则。
print(logical_drives[0]['physical_drives'][0]['marketing_capacity'])
答案 2 :(得分:1)
试试这个
import hpilo
ilo = hpilo.Ilo('10.0.0.1', 'USER', 'PASSWORD')
health = ilo.get_embedded_health()
logical_drives = (logical_drives[0]['physical_drives'][0]['marketing_capacity'])
print(logical_drives)
答案 3 :(得分:1)
像其他任何列表一样循环遍历:
drive_data = health['storage']['Controller on System Board']['logical_drives']
for logical_drive in drive_data:
for physical_drive in logical_drive['physical_drives']:
print(physical_drive['marketing_capacity'])
答案 4 :(得分:1)
要获取'marketing_capacity'的所有值,我会使用通用列表理解。
lst = [{'label': '01', 'status': 'OK', 'capacity': '419 GiB', 'fault_tolerance': 'RAID 1/RAID 1+0', 'logical_drive_type': 'Data LUN', 'encryption_status': 'Not Encrypted', 'physical_drives': [{'label': 'Port 1I Box 1 Bay 1', 'status': 'OK', 'serial_number': 'SXXXXXXXX', 'model': 'YYYYYY', 'capacity': '419 GiB', 'marketing_capacity': '450 GB', 'location': 'Port 1I Box 1 Bay 1', 'fw_version': 'HPD9', 'drive_configuration': 'Configured', 'encryption_status': 'Not Encrypted', 'media_type': 'HDD'}, {'label': 'Port 1I Box 1 Bay 2', 'status': 'OK', 'serial_number': 'SXXXXXX', 'model': 'YYYYYY', 'capacity': '419 GiB', 'marketing_capacity': '450 GB', 'location': 'Port 1I Box 1 Bay 2', 'fw_version': 'HPD9', 'drive_configuration': 'Configured', 'encryption_status': 'Not Encrypted', 'media_type': 'HDD'}]}]
res = [d2.get('marketing_capacity') for d2 in d.get('physical_drives') for d in lst]
# ['450 GB', '450 GB']
请注意,这适用于外部列表中的任意字典,以及内部列表中的任意字典。