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

Python中用推导式和DataFrame从字典列表提取数据的方法

Python字典列表的两类核心操作:筛选子集与统计次数

关于生成器表达式的疑问

你之前写的(item for item in ls_dict if item['AP']=='WAP1')是生成器表达式,它属于惰性迭代器,不会直接生成所有匹配结果,直接打印只会显示迭代器对象。next()函数仅会取生成器的第一个元素,所以只能拿到单个匹配项。要获取所有结果,需将生成器转成列表,或直接使用列表推导式。

一、提取所有符合条件的字典子集

要获取全部匹配条件的字典,直接用列表推导式即可,它会一次性生成所有符合条件的元素并返回列表:

示例:提取所有AP键值为WAP1的字典

ls_dict = [{'network': 'NET1', 'AP': 'WAP1', 'MAC': 'FF01', 'ap_mac' : 'eeeeeeeeeeee'},
           {'network': 'NET1', 'AP': 'WAP1', 'MAC': 'FF02', 'ap_mac' : 'eeeeeeeeeeee'},
           {'network': 'NET1', 'AP': 'WAP2', 'MAC': 'FF03', 'ap_mac' : 'eeeeeeeeeeee'},
           {'network': 'NET2', 'AP': 'WAP3', 'MAC': 'FF04', 'ap_mac' : 'eeeeeeeeeeee'}]

# 提取所有AP为WAP1的字典
matched_dicts = [item for item in ls_dict if item['AP'] == 'WAP1']
print(matched_dicts)

输出结果:

[{'network': 'NET1', 'AP': 'WAP1', 'MAC': 'FF01', 'ap_mac': 'eeeeeeeeeeee'}, {'network': 'NET1', 'AP': 'WAP1', 'MAC': 'FF02', 'ap_mac': 'eeeeeeeeeeee'}]

针对你的MAC搜索需求,提取所有匹配目标MAC的字典:

target_mac = 'FF01'
mac_matched = [item for item in ls_dict if item['MAC'] == target_mac]

二、统计指定键值的出现次数

统计有两种高效方式,尤其适合处理大型字典列表:

方式1:列表推导式长度(直观易懂)

# 统计network为NET1的字典数量
count_net1 = len([item for item in ls_dict if item['network'] == 'NET1'])
print(count_net1)  # 输出:3

方式2:sum累加计数(内存更高效)

用生成器表达式配合sum(),每次匹配成功就累加1,无需生成完整列表,避免占用额外内存,适合超大型数据集:

count_net1 = sum(1 for item in ls_dict if item['network'] == 'NET1')

针对你的MAC统计需求:

target_mac = 'FF01'
mac_count = sum(1 for item in ls_dict if item['MAC'] == target_mac)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:17:28