繁体   English   中英

比较Python中两个字典之间的整数值

[英]Compare integer values between two dictionaries in Python

我对该脚本的目标是将客户端软件的当前版本与供应商提供的当前软件版本进行比较。 在此阶段,我只想打印出可用的内容。

我有两个字典设置:

versions = {
'v80':[80.24,80.16,80.15,80.7],
'v81':[81.12,81.7,81.4,81.11],
'v82':[82.7,82.5,82.9,82.6],
'v83':[83.0,83.1,83.1,83.0]
}

client = {
'client_1':[80.1,80.1,80.1,80.1],
'client_2':[81.1,80.1,80.1,80.1],
'client_3':[82.1,80.1,80.1,80.1],
'client_4':[81.1," ",80.1,80.1],
'client_5':[80.1," "," "," "]
}

版本=可用版本/客户端=客户端正在运行的版本

有4个键值代表4种不同的应用程序以及它们所使用的版本。

我尝试了几种方法,但是却碰壁了。

我想将client_ [n]中的键值与相应版本进行比较(不知道如何将client_3与v83链接,将client1与v80等链接)。 比较将遵循以下思路:

if client['client_1'][0] < versions['v80'][0] print(client.client_1[0],"-->",versions.v80[0])

提前致谢 !

您可以引入第三个字典作为接口

versions = {
'v80':[80.24,80.16,80.15,80.7],
'v81':[81.12,81.7,81.4,81.11],
'v82':[82.7,82.5,82.9,82.6],
'v83':[83.0,83.1,83.1,83.0]
}

interface = {

"client_1":"v80",
"client_2":"v81",
"client_3":"v82",
"client_4":"v83",
"client_5":"v84"
}

client = {
'client_1':[80.1,80.1,80.1,80.1],
'client_2':[81.1,80.1,80.1,80.1],
'client_3':[82.1,80.1,80.1,80.1],
'client_4':[81.1," ",80.1,80.1],
'client_5':[80.1," "," "," "]
}

现在只需使用以下内容进行比较:

if client['client_1'][0] < versions[interface["client_1"]][0]:
    print client["client_1"][0],"-->",versions[interface["client_1"]][0]

您可以使用以下for循环:

>>> for i in range(len(versions)):
...     for j in range(len(versions['v8'+str(i)])):
...         try:
...             if client['client_' + str(i+1)][j] < versions['v8' + str(i)][j]:
...                 print ("client_" + str(i+1), "Program_" + str(j+1), client["client_" + str(i+1)][j],"-->",versions["v8"+str(i)][j])
...         except TypeError:
...             print ("client_" + str(i+1), "Program_" + str(j+1), "Missing")
...             continue
... 
client_1 Program_1 80.1 --> 80.24
client_1 Program_2 80.1 --> 80.16
client_1 Program_3 80.1 --> 80.15
client_1 Program_4 80.1 --> 80.7
client_2 Program_1 81.1 --> 81.12
client_2 Program_2 80.1 --> 81.7
client_2 Program_3 80.1 --> 81.4
client_2 Program_4 80.1 --> 81.11
client_3 Program_1 82.1 --> 82.7
client_3 Program_2 80.1 --> 82.5
client_3 Program_3 80.1 --> 82.9
client_3 Program_4 80.1 --> 82.6
client_4 Program_1 81.1 --> 83.0
client_4 Program_2 Missing
client_4 Program_3 80.1 --> 83.1
client_4 Program_4 80.1 --> 83.0

但是,这取决于您提供的信息是否一致, versionsclients数相同以及长度列表相同。

如果您更清楚一点,我可以尝试一个更可靠的解决方案。

你可以试试:

if client['client_1'][0] < versions['v80'][0]:
    print(client["client_1"][0] ,"-->",versions["v80"][0])

要针对所有客户端和版本执行此操作:

versions = {
'v80':[80.24,80.16,80.15,80.7],
'v81':[81.12,81.7,81.4,81.11],
'v82':[82.7,82.5,82.9,82.6],
'v83':[83.0,83.1,83.1,83.0]
}

client = {
'client_1':[80.1,80.1,80.1,80.1],
'client_2':[81.1,80.1,80.1,80.1],
'client_3':[82.1,80.1,80.1,80.1],
'client_4':[81.1," ",80.1,80.1],
'client_5':[80.1," "," "," "]
}


for cli, num_cl in client.items():
    for ver, num in versions.items():
        if int(num[0]) == int(num_cl[0]):
            print(cli, num_cl, ver, num)

并输出:

client_4 [81.1, ' ', 80.1, 80.1] v81 [81.12, 81.7, 81.4, 81.11]
client_5 [80.1, ' ', ' ', ' '] v80 [80.24, 80.16, 80.15, 80.7]
client_2 [81.1, 80.1, 80.1, 80.1] v81 [81.12, 81.7, 81.4, 81.11]
client_3 [82.1, 80.1, 80.1, 80.1] v82 [82.7, 82.5, 82.9, 82.6]
client_1 [80.1, 80.1, 80.1, 80.1] v80 [80.24, 80.16, 80.15, 80.7]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM