Python:按给定键在字典数组中搜索

时间:2020-06-19 16:59:44

标签: python json list

我有一个字典d数组,可以通过解析JSON文件获得:d = r.json()

假设d然后包含

d = [
  {'change':'112','end_time':'2020-05-12','hostname':'a,b,c,d,e','ref':'345','start_time':'202-04-2020'},
  {'change':'182','end_time':'2020-05-12','hostname':'a1,b1,c1,d1,e1','ref':'325','start_time':'202-04-2020'},
  {'change':'122','end_time':'2020-05-12','hostname':'g,h,i,j,k','ref':'315','start_time':'202-04-2020'},
  {'change':'112','end_time':'2020-05-12','hostname':'o,t1,h1,e4,n7','ref':'345','start_time':'202-04-2020'},
]

所有主机名都互不相同的地方,然后如何执行

这样的搜索
if hostname=='a1':
  print change (i.e 182)

3 个答案:

答案 0 :(得分:1)

您需要遍历列表,将主机名分成一个列表,然后检查要搜索的主机名是否存在于列表中。

hostname = 'a1'
for row in d:
  hostnames = row['hostname'].split(',')
  if hostname in hostnames:
    print(row['change'])

答案 1 :(得分:0)

首先,您有很多json结构错误:

d=[{'change':'112','end_time':'2020-05-12','hostname':'a,b,c,d,e','ref':'345','start_time':'202-04-2020'},
{'change':'182','end_time':'2020-05-12','hostname':'a1,b1,c1,d1,e1','ref':'325','start_time':'202-04-2020'},
{'change':'122','end_time':'2020-05-12','hostname':'g,h,i,j,k','ref':'315','start_time':'202-04-2020'},
{'change':'112','end_time':'2020-05-12','hostname':'o,t1,h1,e4,n7','ref':'345','start_time':'202-04-2020'}]


 hostname='a1'
 for row in d:
   arr = row['hostname'].split(",")
   if hostname in arr:
     print(row['change'])




 #parse all the keys for learning.
  for row in d:
     for k in row.keys():
         if k == "hostname":
             arr = row[k].split(",")
             for s in arr:
                 #print(s)
                 if s =='a1':
                     row['change'] = '777'

print(d)

之后,使用反向来重新排列json中的元组。 玩得开心!

答案 2 :(得分:0)

解决该问题的Python方法(使用理解)也是最简单的。

# for your a1 example
change_a1 = [i['change'] for i in d
             if 'a1' in i['hostname']]

对于任意搜索,只需将其包装为一个函数

def find_change(host):
    change = [i['change'] for i in d
              if host in i['hostname']]
    return change