如何使用Python哈希表统计日志中出现频率最高的IP地址
实现思路
- 遍历日志条目拆分提取IP:每条日志的格式为「IP - 请求方法 日期」,按空格拆分后取第一个元素即可得到IP地址
- 基于哈希表(Python字典)统计频次:以IP为key,出现次数为value,遍历过程中累计每个IP的出现次数
- 提取最高频次值:取哈希表中所有value的最大值作为最高出现频次
- 筛选并排序高频IP:过滤出所有出现次数等于最高频次的IP,按IP的字符串升序排序
- 拼接结果:将排序后的IP列表用英文逗号拼接为字符串返回
完整实现代码
def get_most_frequent_ip(lines): # 初始化哈希表统计IP出现次数 ip_counter = {} for line in lines: # 拆分日志提取IP ip = line.split()[0] # 累计计数,不存在的IP默认初始值为0 ip_counter[ip] = ip_counter.get(ip, 0) + 1 # 获取最高出现频次 max_freq = max(ip_counter.values()) # 筛选所有最高频次IP并升序排序 top_ips = sorted([ip for ip, count in ip_counter.items() if count == max_freq]) # 拼接为字符串返回 return ','.join(top_ips) # 测试示例 if __name__ == "__main__": lines = ["10.0.0.1 - GET 2020-08-24", "10.0.0.1 - GET 2020-08-24", "10.0.0.2 - GET 2020-08-20"] print(get_most_frequent_ip(lines)) # 输出:10.0.0.1 # 多IP同最高频次测试 lines2 = ["10.0.0.1 - GET 2020-08-24", "10.0.0.1 - GET 2020-08-24", "10.0.0.2 - GET 2020-08-20", "10.0.0.2 - GET 2020-08-21"] print(get_most_frequent_ip(lines2)) # 输出:10.0.0.1,10.0.0.2
内容的提问来源于stack exchange,提问作者Sa254
相关产品推荐
相关产品推荐

