Home > Enterprise >  Python comparing values from two dictionaries where keys match and one set of values is greater
Python comparing values from two dictionaries where keys match and one set of values is greater

Time:10-19

I have the following datasets:

kpi = {
    "latency": 3,
    "cpu_utilisation": 0.98,
    "memory_utilisation": 0.95,
    "MIR": 200,
}

ns_metrics = {
    "timestamp": "2022-10-04T15:24:10.765000",
    "ns_id": "cache",
    "ns_data": {
        "cpu_utilisation": 0.012666666666700622,
        "memory_utilisation": 8.68265852766783,
    },
}

What I'm looking for is an elegant way to compare the cpu_utilisation and memory_utilisation values from each dictionary and if the two utilisation figures from ns_metrics is greater than kpi, for now, print a message as to which utilisation value was greater,i.e. was it either cpu or memory or both. Naturally, I can do something simple like this:

if ns_metrics["ns_data"]["cpu_utilisation"] > kpi["cpu_utilisation"]:
    print("true: over cpu threshold")

if ns_metrics["ns_data"]["memory_utilisation"] > kpi["memory_utilisation"]:
    print("true: over memory threshold")

But this seems a bit longer winded to have many if conditions, and I was hoping there is a more elegant way of doing it. Any help would be greatly appreciated.

CodePudding user response:

maybe you can use a loop to do this:

check_list = ["cpu_utilisation", "memory_utilisation"]
for i in check_list:
    if ns_metrics["ns_data"][i] > kpi[i]:
        print("true: over {} threshold".format(i.split('_')[0]))

if the key is different,you can use a mapping dict to do it,like this:

check_mapping = {"cpu_utilisation": "cpu_utilisation_1"}
for kpi_key, ns_key in check_mapping.items():
    ....
  • Related