Сравнение и обновление значений списка внутри словарей - PullRequest
0 голосов
/ 04 декабря 2018
dict1 = {
    "domain1": ["53/tcp,open,domain", "80/tcp,open,http"],
    "domain2": ["22/tcp,open,ssh", "25/tcp,open,smtp", "80/tcp,open,http",
                "443/tcp,open,https"],
    "domain3":["22/tcp,open,ssh"]}

Я хочу сравнить dict2 с dict1 и проверить, есть ли новые ключи или значения (то есть список открытых портов), если да, тообновить dict1

dict2 = {
    "domain3":["22/tcp,open,ssh","443/tcp,open,https"],
    "domain4":["80/tcp,open,http", "443/tcp,open,https"],
    "domain5":["80/tcp,open,http", "443/tcp,open,https"]}

Я выполнил первую часть задачи, т.е. найти новые ключи, сравнив dict2 с dict1 ключами и проверив, есть ли новыевведите dict2 и обновите dict1.

new_item = {}
for i in dict2.keys():
    if i not in dict1.keys():
        new_item[i] = dict2[i]
        dict1[i] = dict2[i]
print("NEW DOMAINS FOUND : ",new_item)
print(dict1) ## UPDATED with New Domains Found

Вот вывод:

NEW DOMAINS FOUND :  {
  'domain4': ['80/tcp,open,http', '443/tcp,open,https'],
  'domain5': ['80/tcp,open,http', '443/tcp,open,https']}
 {'domain1': ['53/tcp,open,domain', '80/tcp,open,http'],
  'domain2': ['22/tcp,open,ssh', '25/tcp,open,smtp', '80/tcp,open,http',
              '443/tcp,open,https'],
  'domain3': ['22/tcp,open,ssh'],
  'domain4': ['80/tcp,open,http', '443/tcp,open,https'],
  'domain5': ['80/tcp,open,http', '443/tcp,open,https']}

Мне нужна помощь в решении второй части задачи, которая заключается в сравнении значений dict2 сdict1, и если в dict2 появятся какие-либо новые значения, то обновит dict1 этими значениями.

Если вы посмотрите на dict2[domain3] и dict1[domain3], появится новое значениев dict2[domain3], с этим, теперь dict1[domain3] должно обновляться с этим новым значением.

Вывод, который я хочу сравнивать dict2 с dict1 и обновлять значения / ключи:

dict1

{'domain1': ['53/tcp,open,domain', '80/tcp,open,http'],
 'domain2': ['22/tcp,open,ssh', '25/tcp,open,smtp', '80/tcp,open,http',
             '443/tcp,open,https'],
 'domain3': ["22/tcp,open,ssh", "443/tcp,open,https"],
 'domain4': ['80/tcp,open,http', '443/tcp,open,https'],
 'domain5': ['80/tcp,open,http', '443/tcp,open,https']}

Если вам нужна дополнительная информация или у вас есть сомнения, пожалуйста, оставьте комментарий, и я обновлю вопрос.

1 Ответ

0 голосов
/ 04 декабря 2018

Если порядок элементов внутри списков не важен, вы можете использовать следующее:

dict3 = {}
for k, v in dict2.items():
    dict3[k] = list(set(dict1.get(k, []) + v))

Результирующий dict3:

{'domain3': ['443/tcp,open,https', '22/tcp,open,ssh'], 
 'domain5': ['80/tcp,open,http', '443/tcp,open,https'], 
 'domain4': ['80/tcp,open,http', '443/tcp,open,https']}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...