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
相关产品推荐
相关产品推荐

