python - 如何格式化字典列表中的字典对象?
问题描述
我从网站上抓取后得到了以下列表,让我们假设random.com
tags1 = [{tag.name: tag['src']} for tag in soup.find_all('script')]
tags2 = [{tag.name: tag['href']} for tag in soup.find_all(name="link",attrs={'rel':'stylesheet'})]
tag_list = tags1 + tags2
print(tag_list)
[ {'script': 'js/custom.js'}, {'script': 'https:cdnjs.cloudflare.c
om/ajax/libs/fancybox/2.1.5/jquery.fancybox.min.js'}, {'link': 'css/bootstrap.min.css'}, {'link': 'css/style.css'}, {'link': 'css/responsive.css'}, {'link': 'css/jqu
ery.mCustomScrollbar.min.css'}, {'link': 'https://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css'}]
我想根据条件修改这个列表:
https://
从值中删除- 将值分成两部分:域和路径。
- 如果没有域名,添加域名为
random.com
预期的输出将如下所示:
[ {'script': [{'domain':'random.com','path':'js/custom.js'}]}, {'script': [{'domain':'cdnjs.cloudflare.c
om','path':'ajax/libs/fancybox/2.1.5/jquery.fancybox.min.js'}]}, {'link': [{'domain':'random.com','path':'css/bootstrap.min.css'}]}, {'link': [{'domain':'random.com','path':'css/style.css'}]}, {'link': [{'domain':'random.com','path':'css/responsive.css'}]}, {'link': [{'domain':'random.com','path':'css/jqu
ery.mCustomScrollbar.min.css'}]}, {'link': [{'domain':'netdna.bootstrapcdn.com','path':'font-awesome/4.0.3/css/font-awesome.css'}]}]
像这样的东西。
解决方案
这是一个解决方案,您可以尝试一下,使用urllib.parse
from urllib.parse import urlparse
output_ = []
# --> Regex to format URI with invalid schema
extract_uri = re.compile(r":(.+)")
for tag in tags:
for k, v in tag.items():
extract_ = extract_uri.search(v)
# --> Identify the URI with schema & prefix format the schema
if extract_:
v = "https://" + extract_.group(1).replace("//", "")
parse_ = urlparse(v) # --> Parse the URI
output_.append({
k: [{
"domain": parse_.netloc if parse_.netloc else "random.com",
"path": parse_.path
}]
})
print ( output )
[{'script': [{'domain': 'random.com', 'path': 'js/custom.js'}]},
{'script': [{'domain': 'cdnjs.cloudflare.com',
'path': '/ajax/libs/fancybox/2.1.5/jquery.fancybox.min.js'}]},
{'link': [{'domain': 'random.com', 'path': 'css/bootstrap.min.css'}]},
{'link': [{'domain': 'random.com', 'path': 'css/style.css'}]},
{'link': [{'domain': 'random.com', 'path': 'css/responsive.css'}]},
{'link': [{'domain': 'random.com',
'path': 'css/jquery.mCustomScrollbar.min.css'}]},
{'link': [{'domain': 'netdna.bootstrapcdn.com',
'path': '/font-awesome/4.0.3/css/font-awesome.css'}]}]
推荐阅读
- kubernetes - 1 个节点具有 pod 在 kubernetes 集群中无法容忍的污点
- excel - Application.Match 仅适用于“查找”选项卡活动
- sql - 用于动态选择的 Firebird 存储过程
- asp.net - 无法更改 Azure VM IIS 中的最大请求长度
- python-3.x - 需要精简版的 Libav 或 FFmpeg 才能使用 python
- java - 重复发布请求保护,多线程
- ubuntu - 无法启用 kubeflow
- python - 在 django 电子邮件中呈现详细信息
- powerbi - Power Query - 从其他列获取值并删除响应值
- react-native - React Native 传递状态引用而不是状态值