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

2024-09-29 00:19:47 发布

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

我有两个字典,我想比较hosts字典中的srvuidbackup字典中的srvuidorg的值。你知道吗

这是主机:

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字典中是否存在此主机名,并使用srvuid获取输出

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.")

最后我要比较srvuidsrvuidorg。下面的代码不工作,这意味着执行时没有输出:

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.")

我应该如何比较这本词典中的两个值,或者我应该改变主题的方法,使用不同于比较词典的方法?你知道吗


Tags: inforif字典uuidstatusbackuphostname
2条回答

您不需要在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.")

我想你可能想要的是:

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.")

这将打印存储在备份字典的srvuidorg键上的值。我认为您遇到的问题是,您使用的是以前代码块中的backup\u status的旧值,而不是backup[srvuidorg]dict和key上存储的backup\u status的正确值。你知道吗

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

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

如果srvuuidorg==srvuid(即备份字典中存在srvuid键),这将打印存储在备份字典中srvuid键上的值。那也许是更好的方法。希望有帮助!你知道吗

相关问题 更多 >