解析列表/字典时如何提取同时含rep、Ips、ipC键的字典元素
解决方案
核心筛选逻辑
你需要的筛选需求可通过1行列表推导式实现,判断每个字典是否同时包含Ips和ipC两个键即可:
# 输入ipreparray,输出符合要求的字典列表 filtered_items = [item for item in ipreparray if 'Ips' in item and 'ipC' in item]
该逻辑会自动过滤掉仅含rep键的字典,完全匹配你要的筛选规则。
整合到现有代码的完整实现
以下是修改后的get_traffic_stats函数,保留原有逻辑的基础上新增了筛选处理:
import json def get_traffic_stats(service, domain_name, date): try: query = 'domains/%s/trafficStats/%s' %(domain_name,date) traffic_stats = service.domains().trafficStats().get(name=query).execute() # 这里不需要dumps再loads,traffic_stats本身就是字典结构,可直接使用 resp_dict = traffic_stats b = ',' domrep = str(resp_dict.get('domainReputation')) spamratio = str(resp_dict.get('userReportedSpamRatio')) spf = str(resp_dict.get('spfSuccessRatio')) dkim = str(resp_dict.get('dkimSuccessRatio')) dmarc = str(resp_dict.get('dmarcSuccessRatio')) encrypt = str(resp_dict.get('inboundEncryptionRatio')) # 处理IP reputations筛选 filtered_ip_reps = [] if 'ipReputations' in resp_dict: ipreparray = resp_dict['ipReputations'] # 执行筛选 filtered_ip_reps = [item for item in ipreparray if 'Ips' in item and 'ipC' in item] # 可按需打印筛选结果 print("筛选后的IP reputations:", filtered_ip_reps) # 如果你需要把筛选结果拼入final字符串,可参考以下写法 ip_rep_str = ';'.join([f"rep:{item['rep']},Ips:{','.join(item['Ips'])},ipC:{item['ipC']}" for item in filtered_ip_reps]) final = date + b + domain_name + b + domrep + b + spamratio + b + spf + b + dkim + b + dmarc + b + encrypt + b + ip_rep_str return str(final) except Exception as e: # 建议加异常捕获避免程序直接崩溃 print(f"处理出错:{str(e)}") return "" # 测试用你提供的trafficStats数据 trafficStats = {'name': 'domains/account.net/trafficStats/20210718', 'ipReputations': [{'rep': 'B'}, {'rep': 'L'}, {'rep': 'M'}, {'rep': 'H', 'Ips': ['141.54.247.35-141.54.247.41', '141.54.247.44'], 'ipC': '8'}], 'domainReputation': 'HIGH', 'spfSuccessRatio': 1, 'dkimSuccessRatio': 1, 'dmarcSuccessRatio': 1, 'inboundEncryptionRatio': 1, 'deliveryErrors': [{'errorClass': 'TEMPORARY_ERROR', 'errorType': 'SUSPECTED_SPAM'}]}
测试效果
用你提供的测试数据执行筛选,得到的结果为:
[{'rep': 'H', 'Ips': ['141.54.247.35-141.54.247.41', '141.54.247.44'], 'ipC': '8'}]
完全符合筛选要求。
内容的提问来源于stack exchange,提问作者Sonal Singh
相关产品推荐
相关产品推荐

