无法比较 Python 中两个字典中的变量



我有两个字典,我想比较它们在hosts字典中的值srvuuidbackup词典中的值。

这是主机:

hosts = {}
for d in data['servers']['server']:
srvhostname = d['hostname']
srvuuid = d['uuid']
hosts[srvhostname] = srvuuid

这是备份:

backup = {}
for u in backup_list['storages']['storage']:
srvuuidorg = u['origin']
backup_status = u['state']
backup[srvuuidorg] = backup_status

我提取机器主机名,然后检查hosts字典中是否存在此主机名,并使用srvuuid获取输出

hostname = gethostname()
print(hostname)
for srvhostname in hosts:
if srvhostname != hostname:
continue
if srvhostname == hostname:
print(srvhostname + " : " + hosts[srvhostname])
break
else:
print("There is no matching hostname or uuid.")

最后,我想比较srvuuidsrvuuidorg。下面的代码不起作用,这意味着执行时没有输出:

for srvuuidorg in backup:
if srvuuidorg != srvuuid:
continue
if srvuuidorg == srvuuid:
print("Status for " + srvuuidorg + " is " + backup_status)
break
else:
print("No maching uuid found.")

我应该如何比较这些字典中的两个值,或者我应该改变主题的方法,使用与比较字典不同的东西?

我想你可能想要的是:

srvuuid_match = False
for srvuuidorg in backup:
if srvuuidorg == srvuuid:
print("Status for " + srvuuidorg + " is " + backup[srvuuidorg])
srvuuid_match = True
break
if srvuuid_match is False:
print("No maching uuid found.")

这将打印存储在备份字典的srvuuidorg密钥上的值。我认为您遇到的问题是,您使用的是前一段代码中的旧值backup_status,而不是存储在backup[srvuidorg]dict和key上的正确值backup_sttatus。

但是,没有必要循环。你可以做:

if srvuuid in backup:
print("Status for " + srvuuidorg + " is " + backup[srvuuid])
else:
print("No maching uuid found.")

如果srvuuidorg==srvuuid(即备份dict中存在srvuuid键(,这将打印备份字典中存储在srvuuide键上的值。这可能是更好的方法。希望能有所帮助!

您不需要在dict上循环查看是否存在密钥,查找时间为O(1):

hostname = gethostname()
print(hostname)
if hostname in hosts:
print(srvhostname + " : " + hosts[hostname])
#srvuuid = hosts[hostname]                      ## I'm just guessing here 
else:
print("There is no matching hostname or uuid.")
if srvuuid in backup:
print("Status for " + backup[srvuuid] + " is " + backup_status)
else:
print("No maching uuid found.")

最新更新