根据字典中的两个值比较多个词典的条目



我有两个python字典,我需要一种有效的方法来迭代一个字典,根据另一个字典检查每个条目的多个值。如果该条目不存在,我需要将该条目从一个字典添加到源字典中。

我尝试了不同的方法,例如 itter() 对两个字典值,并使用"in"查看该值是否存在但逻辑在某处被破坏。

for key, value in export_data.iteritems():
if  value['computer_id'] and value['computer_name'] in import_data.iteritems():

如果computer_idcomputer_nameimport_data中,则继续,如果没有,则将import_data中缺少的词典项目添加到export_data词典中。

在下面的示例数据中,'import_data'有一个额外的项目"host-c",我希望将其添加到export_data字典中。

我很难理解的部分是还有"host-g"的记录,但computer_id与 export_data 中的 host-a 相同,所以我不想添加该条目。

只有computer_name和computer_id都不同的独特物品。

示例数据:

export_data = 
{u'host-a': {'computer_id': [u'6353a65387'], 'computer_name': ['host-a'], 'first_observed': ['Wed Jul 24 13:57:56  2019']}, {u'host-b': {'computer_id': [u'635365d387'], 'computer_name': ['host-b'], 'first_observed': ['Wed Jul 24 13:57:56  2019']}
import_data = 
{u'host-a': {'computer_id': [u'6353a65387'], 'computer_name': ['host-a'], 'first_observed': ['Wed Jul 24 13:57:56  2019']}, {u'host-b': {'computer_id': [u'635365d387'], 'computer_name': ['host-b'], 'first_observed': ['Wed Jul 24 13:57:56  2019']},{u'host-c': {'computer_id': [u'6353654d387'], 'computer_name': ['host-c'], 'first_observed': ['Wed Jul 24 13:57:56  2019']},{u'host-g': {'computer_id': [u'6353a65387'], 'computer_name': ['host-g'], 'first_observed': ['Wed Jul 24 13:57:56  2019']}

我认为没有办法遍历这两个字典并手动比较值。试验你的代码,我得到了这个:

export_data = {
u'host-a': {
'computer_id': [u'6353a65387'],
'computer_name': ['host-a'],
'first_observed': ['Wed Jul 24 13:57:56  2019']
},
u'host-b': {
'computer_id': [u'635365d387'],
'computer_name': ['host-b'],
'first_observed': ['Wed Jul 24 13:57:56  2019']
}
}
import_data = {
u'host-a': {
'computer_id': [u'6353a65387'],
'computer_name': ['host-a'],
'first_observed': ['Wed Jul 24 13:57:56  2019']
},
u'host-b': {
'computer_id': [u'635365d387'],
'computer_name': ['host-b'],
'first_observed': ['Wed Jul 24 13:57:56  2019']
},
u'host-c': {
'computer_id': [u'6353654d387'],
'computer_name': ['host-c'],
'first_observed': ['Wed Jul 24 13:57:56  2019']
},
u'host-g': {
'computer_id': [u'6353a65387'],
'computer_name': ['host-g'],
'first_observed': ['Wed Jul 24 13:57:56  2019']
}
}
print(export_data)
additional_export_data = []
for im_key, im_value in import_data.items():
found_in_export = False
for ex_key, ex_value in export_data.items():
if ex_value['computer_id'][0] == im_value['computer_id'][0] and ex_value['computer_name'][0] == im_value['computer_name'][0]:
found_in_export = True
if not found_in_export:
additional_export_data.append((im_key, im_value))
print(im_key, im_value['computer_id'][0])
print("")
for key, value in additional_export_data:
export_data[key] = value
print(export_data)

这会将键值对从import_data添加到export_data,如果export_data中没有具有相同computer_idcomputer_name的条目。


我也不知道为什么你的export_dataimport_data是这样构建的。 字典的键与computer_name值相同。computer_idcomputer_namefirst_observed都是一个列表,即使它对我来说没有意义。

也许您有理由以这种方式构建数据,但如果没有,我建议您执行以下操作:

  • 摆脱子词典中的computer_name
  • computer_idfirst_observed的值存储为字符串,而不是列表中的字符串

如果这样做,代码如下所示:

export_data = {
u'host-a': {
'computer_id': u'6353a65387',
'first_observed': 'Wed Jul 24 13:57:56  2019'
},
u'host-b': {
'computer_id': u'635365d387',
'first_observed': 'Wed Jul 24 13:57:56  2019'
}
}
import_data = {
u'host-a': {
'computer_id': u'6353a65387',
'first_observed': 'Wed Jul 24 13:57:56  2019'
},
u'host-b': {
'computer_id': u'635365d387',
'first_observed': 'Wed Jul 24 13:57:56  2019'
},
u'host-c': {
'computer_id': u'6353654d387',
'first_observed': 'Wed Jul 24 13:57:56  2019'
},
u'host-g': {
'computer_id': u'6353a65387',
'first_observed': 'Wed Jul 24 13:57:56  2019'
}
}
print(export_data)
additional_export_data = []
for im_key, im_value in import_data.items():
found_in_export = False
for ex_key, ex_value in export_data.items():
if ex_value['computer_id'] == im_value['computer_id'] and ex_key == im_key:
found_in_export = True
if not found_in_export:
additional_export_data.append((im_key, im_value))
print(im_key, im_value['computer_id'])
print("")
for key, value in additional_export_data:
export_data[key] = value
print(export_data)

相关内容

  • 没有找到相关文章

最新更新