#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
inlist1
иhostname7
inlist2
.
Ответ №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)
Я надеюсь, что смогу помочь 😉