比较和更新字典中的列表值

时间:2018-12-03 23:11:34

标签: python python-3.x python-2.7 dictionary

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"]}

我完成了任务的第一部分,即通过将dict2dict1 进行比较并查找{{1}中是否有任何新键来找到任何新键。 }并更新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

我需要帮助解决任务的第二部分,即比较dict2和dict1的值,如果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']} 中有任何新值,则用这些值更新dict1。

如果您查看dict2dict2[domain3],则dict1[domain3]中有一个新值,现在dict2[domain3]应该用这些新值进行更新。

在比较dict1[domain3]dict2并更新值/键时需要的输出:

dict1

dict1

如果您需要更多信息或有疑问,请留下评论,我将更新问题。

1 个答案:

答案 0 :(得分:2)

如果列表内元素的顺序并不重要,则可以使用以下内容:

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']}