Python:从字典列表中提取不同域名的实现方法
提取列表中URL的唯一域名(Python化实现)
不用正则的话,Python标准库的urllib.parse模块是更可靠、更符合Python风格的解决方案——它专门用来解析URL结构,能处理各种合法URL格式,比正则表达式更不易出错。
实现步骤
- 导入
urlparse工具(Python3中位于urllib.parse) - 遍历列表中的每个字典,提取
url字段并解析出域名部分(netloc属性) - 利用集合自动去重的特性,快速得到唯一域名
- 按需转换为你需要的格式
代码示例
先定义原始列表
from urllib.parse import urlparse url_list = [ {'url': 'https://stackoverflow.com/questions', 'number': 10}, {'url': 'https://stackoverflow.com/users', 'number': 40}, {'url': 'https://stackexchange.com/tour', 'number': 40}, {'url': 'https://stackexchange.com/whatever/whatever', 'number': 25} ]
生成第二种格式(更简便高效)
直接得到域名字符串的列表:
# 集合推导式去重,再转成列表 unique_domains = list({urlparse(item['url']).netloc for item in url_list}) # 输出结果: ['stackoverflow.com', 'stackexchange.com']
生成第一种格式
如果需要字典组成的列表,基于上面的结果转换即可:
unique_domains_format1 = [{'url': f'https://{domain}'} for domain in unique_domains] # 输出结果: [{'url': 'https://stackoverflow.com'}, {'url': 'https://stackexchange.com'}]
为什么这个方法更好?
- 可靠性:
urlparse是官方维护的URL解析工具,能处理带端口、子域名等复杂情况,不会像正则那样因URL格式变种出现匹配错误 - 效率:集合的去重操作是O(n)时间复杂度,比手动遍历判断更高效
- 简洁性:一行集合推导式就能完成去重提取,符合Python的"简洁优雅"风格
内容的提问来源于stack exchange,提问作者migueltic
相关产品推荐
相关产品推荐

