【发布时间】:2021-04-02 17:20:55
【问题描述】:
我有一个类型为 Vm 的对象
<class 'azure.mgmt.compute.v2019_07_01.models._models_py3.VirtualMachine'> 我想通过循环遍历这个对象,这样我就不必手动提取值了。
是的,我尝试isinstance 来检查值是否为<class 'azure.mgmt.compute.v2019_07_01.models._models_py3.VirtualMachine'> 类型并提取,但在下一次迭代中它失败了。
例如,让我们将 vm 视为一个对象
- 要访问虚拟机大小,我必须这样做
vm.hardware_profile.vm_size - 与访问操作系统类型值类似,我将不得不这样做
vm.storage_profile.os_disk.os_type
我在这里想要实现的是,如果我传递 vm 对象,它应该返回所有的最终值。非常感谢任何帮助或提示,并在此先感谢
我写的代码
def iterdict(d):
for k,v in d.items():
if isinstance(v, dict):
iterdict(v)
else:
print (k,":",v)
for vm in compute_client.virtual_machines.list_all():
print(iterdict(vars(vm)))
以及我得到的输出
name : arun-scheduler
type : Microsoft.Compute/virtualMachines
location : eastus
ml-scheduler : Test
stop_time : 2020-12-25 15:22:40.042295
plan : None
resources : None
identity : None
zones : None
hardware_profile : {'additional_properties': {}, 'vm_size': 'Standard_A1_v2'}
storage_profile : {'additional_properties': {}, 'image_reference': <azure.mgmt.compute.v2019_07_01.models._models_py3.ImageReference object at 0x000001AD6D5964C0>, 'os_disk': <azure.mgmt.compute.v2019_07_01.models._models_py3.OSDisk object at 0x000001AD6D596EB0>, 'data_disks': []}
additional_capabilities : None
os_profile : {'additional_properties': {}, 'computer_name': 'arun-scheduler', 'admin_username': 'xxxxxx', 'admin_password': None, 'custom_data': None, 'windows_configuration': None, 'linux_configuration': <azure.mgmt.compute.v2019_07_01.models._models_py3.LinuxConfiguration object at 0x000001AD6D596100>, 'secrets': [], 'allow_extension_operations': True, 'require_guest_provision_signal': True}
network_profile : {'additional_properties': {}, 'network_interfaces': [<azure.mgmt.compute.v2019_07_01.models._models_py3.NetworkInterfaceReference object at 0x000001AD6D596850>]}
diagnostics_profile : {'additional_properties': {}, 'boot_diagnostics': <azure.mgmt.compute.v2019_07_01.models._models_py3.BootDiagnostics object at 0x000001AD6D5966A0>}
availability_set : None
virtual_machine_scale_set : None
proximity_placement_group : None
priority : None
我期望的输出:
它应该提取输入中的所有对象
【问题讨论】:
-
您可以使用另一个循环并检查字典的值,在循环内您可以使用您正在使用的相同代码
-
它不是一个级别....我需要一个递归答案...以便它可以从对象中提取所有值
-
这可能是不可能的。因为核心代码可能用另一种语言实现,而这只是一个包装器,所以您可能无法通过 dict 方法访问元素。相反,您将不得不使用 dir 函数,删除所有魔术方法并尝试查找所有元素。
-
谢谢,但我刚刚尝试了 dir .....它似乎不是我正在寻找的解决方案......但无论如何都感谢
标签: python azure loops recursion