You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中两个含字典的列表跨列表字段匹配查询实现问题

实现方案

核心逻辑是先提取list2中所有Q1字段的内容,再逐个校验list1每条数据的IP、Hostname是否存在于任意一个Q1字符串中。提前提取Q1内容可以避免每次校验都重复遍历list2,数据量较大时性能优势更明显。

完整可运行代码

# 示例输入数据
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'}
]

# 预提取所有Q1内容
all_q1 = [item['Q1'] for item in list2]

# 遍历校验输出结果
for item in list1:
    check_flag = any(item['IP'] in q1 or item['Hostname'] in q1 for q1 in all_q1)
    print(f"ID为{item['ID']}的条目结果:{'OKAY' if check_flag else 'NO'}")

运行输出

ID为0的条目结果:NO
ID为1的条目结果:OKAY
ID为2的条目结果:OKAY
ID为3的条目结果:NO

如果只需要生成结果列表不需要打印,也可以直接用列表推导式实现:

res = ["OKAY" if any(i['IP'] in q or i['Hostname'] in q for q in all_q1) else "NO" for i in list1]

内容的提问来源于stack exchange,提问作者snorlax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:18:00