Pet*_*ent 1 python dictionary list
所以基本上我有三个这样的列表:
list1 = [{
'IP' : "1.1.1.1",
'ID' : 1,
},
{
'IP' : "2.2.2.2",
'ID' : 2
}]
list2 = [{
'vulnerability_id' : 4567,
'ID' : 1,
},
{
'vulnerability_id' : 6578,
'ID' : 2
}]
list3 = [{
'vulnerability_id' : 4567,
'description' : 'blah',
},
{
'vulnerability_id' : 6578,
'description' : 'blah blah'
}]
Run Code Online (Sandbox Code Playgroud)
我需要做的是基于IP获取漏洞的描述,但这可能需要某种列表理解,我不知道如何去做.(并把它放在一本新词典中)
我需要检查我的IP值,比如1.1.1.1,然后将它的ID与list2进行比较,然后比较list3中关联的'vulnerability_id'.
任何帮助将不胜感激,如果这没有意义,请说,我会尝试和扩展.
这在计算方面非常重要,但您只有列表作为数据源,因此,这是我的"解决方案":
results = []
for ip_info in list1:
result = {}
result['ip'] = ip_info['IP']
result['vulnerability'] = next((
vuln_info['vulnerability_id']
for vuln_info in list2
if vuln_info['ID'] == ip_info['ID']
),None)
result['description'] = next((
desc_info['description']
for desc_info in list3
if desc_info['vulnerability_id'] == result['vulnerability']
),None)
results.append(result)
Run Code Online (Sandbox Code Playgroud)
结果:
[{'description': 'blah', 'ip': '1.1.1.1', 'vulnerability': 4567},
{'description': 'blah blah', 'ip': '2.2.2.2', 'vulnerability': 6578}]
Run Code Online (Sandbox Code Playgroud)
编辑:根据我的答案改进和@Alex Hall回答:
def find(l, match, v, k):
return next((x[k] for x in l if x[match] == v), None)
results = []
for ip_info in list1:
ip = ip_info['IP']
_id = ip_info['ID']
vul = find(list2, 'ID', _id, 'vulnerability_id')
desc = find(list3, 'vulnerability_id', vulnerability, 'description')
results.append(dict(ip=ip, vulnerability=vul, description=desc))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |