在python词典中搜索匹配的值

2024-09-20 05:57:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试根据vmware quick stats计算%的cpu利用率。问题是quickstats不能为guest提供%cpu利用率,所以我必须找到一种方法来计算它。我将主机cpu速度值对存储在字典中,如下所示:

{'host-594': 2194, 'host-10249': 2194, 'host-6484': 2194, 'host-6486': 1861, 'host-6480': 2194, 'host-6482': 2194, 'host-699': 2194, 'host-6364': 1861, 'host-500': 2194, 'host-17424': 2194, 'host-502': 2194, 'host-17426': 2194, 'host-17420': 2194, 'host-17422': 2194, 'host-17428': 2194, 'host-1805': 2665, 'host-4360': 1862, 'host-858': 2194, 'host-1067': 2194, 'host-1065': 2194, 'host-4162': 1861, 'host-1063': 2194, 'host-1061': 2194, 'host-17396': 2194, 'host-3394': 2132, 'host-1069': 2194, 'host-5565': 2132}

那么

我可以按如下方式使用\u CpuMhz、Num \u vCpu和host \u id(来宾所属):

properties = ["name",
              "summary.quickStats.overallCpuUsage",
              "summary.runtime.host",
              "config.hardware.numCPU"]
results = s._retrieve_properties_traversal(property_names=properties, obj_type=MORTypes.VirtualMachine)

for item in results:
        for r in item.PropSet:
               if r.Name == "name" :
                name = r.Val

        Used_CpuMhz = 0
        Num_vCpu = 0
        host_id = none


        for p in item.PropSet:

            if p.Name=="summary.quickStats.overallCpuUsage":
                    Used_CpuMhz=p.Val  

            if p.Name=="config.hardware.numCPU":
                    Num_vCpu=p.Val  

            if p.Name=="summary.runtime.host":
                    host_id=p.Val
            #here I have to read myDict() where I need get the value pair
            #for host_id in myDict. I need to scan myDict and if I see host_id
            #in there, I need to assign the value to speed variable in here
                   %CPU= Used_CpuMhz/(Num_vCpu*speed)

给定这个值:{host-594': 2194},如果if语句中的主机id是“host-594”,那么速度应该是2194。因此对于每个客户机,我需要扫描myDict并找到匹配主机的cpu速度。有人能告诉我怎么做吗

我修改了代码如下:

if p.Name=="summary.quickStats.overallCpuUsage":
                    Used_CpuMhz=p.Val  

if p.Name=="config.hardware.numCPU":
                    Num_vCpu=p.Val  
if p.Name=="summary.runtime.host":
                    host_id=p.Val
                    if host_id in myDict:
                        cpu_speed = myDict[host_id]

if Used_CpuMhz >0 and  Num_vCpu >0:
                    Percent_Cpu_Used=(float(Used_CpuMhz)/(float(Num_vCpu)*float(cpu_speed)))*100

我得到这个错误:

Traceback (most recent call last):
  File "host.py", line 138, in <module>
    Percent_Cpu_Used=(float(Used_CpuMhz)/(float(Num_vCpu)*float(cpu_speed)))*100
ZeroDivisionError: float division

Tags: nameinidhostifvalcpusummary
2条回答

如果要指定在字典中找不到主机时使用的默认值:

speed = myDict.get(host_id, 12345) # Default of 12345

当然,如果您确实希望所有主机都在字典中,那么只需查找它:

speed = myDict[host_id]
if host_id in myDict:
    speed = myDict[host_id]

一种等效的方法:

if host_id in myDict.keys():
    speed = myDict[host_id]

相关问题 更多 >