Сравните значение(в dict) в одном списке с другим списком [Python]

#python #list #dictionary #compare

Вопрос:

У меня есть два списка(и диктант внутри), как это;

 list1 = [
    {'ID': 0, 'IP': '192.168.1.1', 'Hostname': 'hostname1'}, 
    {'ID': 1, 'IP': '192.168.1.2', 'Hostname': 'hostname2'}, 
    {'ID': 2, 'IP': '192.168.1.3', 'Hostname': 'hostname3'}, 
    {'ID': 3, 'IP': '192.168.1.4', 'Hostname': 'hostname4'}
]
 
 list2= [
    {'Q1': 'HOST_hostname9_192.168.9.0', 'Time' :'Fri, 13 Aug 2021 03:25:01  0300'},
    {'Q1': 'HOST_hostname3_192.168.9.4', 'Time' :'Tue, 17 Aug 2021 13:48:39  0300'},
    {'Q1': 'HOST_hostname7_192.168.1.2', 'Time' :'Fri, 13 Aug 2021 03:25:01  0300'}
]
 

Я хочу выполнить поиск данных в полях » IP « или «Имя хоста» в списке 1,, в Q1 в списке 2. Я хочу вывести «окей», если таковые имеются, и «нет», если нет.

Например; «192.168.1.2» находится в Q1, и вывод в порядке, или «имя хоста 3» то же самое, вывод в порядке. Однако 192.168.1.1 и имя хоста1 (мы можем рассматривать эти данные как взаимосвязанные.), он не должен давать выходных данных, потому что его нельзя найти ни в одном Q1.

Надеюсь, я смогу объяснить. Спасибо.

Комментарии:

1. Что вы пробовали до сих пор?

2. Исправьте свой код list1 , чтобы он не работал как есть.

3. Почему 192.168.1.2 выводится hostname3 . Это, кажется, связано с hostname2 in list1 и hostname7 in list2 .

Ответ №1:

ips= {y.get(«IP», «»):y.get(«имена хостов»,»») для y в списке 1} результат= [ y.get(«имя хоста»,Нет) для y в списке 2, если y.get(«имя хоста»,нет) в ips.значениях()]

Что-то вроде того.

Ответ №2:

Это, кажется, отвечает на вопрос, если я его понял…

или пример; «192.168.1.2» находится в Q1, и вывод в порядке, или «имя хоста 3» то же самое,

 list1 = [
{'ID': 0, 'IP': '192.168.1.1', 'Hostname': 'hostname1'}, 
{'ID': 1, 'IP': '192.168.1.2', 'Hostname': 'hostname2'}, 
{'ID': 2, 'IP': '192.168.1.3', 'Hostname': 'hostname3'}, 
{'ID': 3, 'IP': '192.168.1.4', 'Hostname': 'hostname4'}]

list2= [
    {'Q1': 'HOST_hostname9_192.168.9.0', 'Time' :'Fri, 13 Aug 2021 03:25:01  0300'},
    {'Q1': 'HOST_hostname3_192.168.9.4', 'Time' :'Tue, 17 Aug 2021 13:48:39  0300'},
    {'Q1': 'HOST_hostname7_192.168.1.2', 'Time' :'Fri, 13 Aug 2021 03:25:01  0300'}
   ]

#brutal or clever?  hmmm...
x = str(list2)

for item in list1:
    for key in item.keys():
        if key in ['IP', 'Hostname']:
            if item[key] in x:
                print('OK', item[key])

#>> OK 192.168.1.2
#>> OK hostname3
 

Ответ №3:

Лучший способ обслуживания данных-использование базы данных. Вы можете проверить https://www.xplenty.com/blog/which-database/ чтобы найти лучшую базу данных для вашего случая… но для этого вопроса вы можете попробовать этот код:

   error = None
  for obj in list2:
      for key in obj.keys():
          if key is 'Q1' or key is 'Hostname':
              print(obj[key])
          else:
              error = "Not Found"
  if error:
      print(error)
 

Я надеюсь, что смогу помочь 😉