Python: поиск в массиве словарей по заданному ключу - PullRequest
0 голосов
/ 19 июня 2020

У меня есть массив словарей 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 ]

1 голос
/ 19 июня 2020

Вам нужно перебрать список, разделить имена хостов на список и проверить, существует ли имя хоста, которое вы ищете, в этом списке.

hostname = 'a1'
for row in d:
  hostnames = row['hostname'].split(',')
  if hostname in hostnames:
    print(row['change'])
0 голосов
/ 19 июня 2020

Способ Pythoni c решить эту проблему (с использованием понимания) также является самым простым.

# 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
0 голосов
/ 19 июня 2020

Прежде всего, у вас много 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)

после этого используйте reverse, чтобы переупорядочить кортежи в json. Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...