python - 从python中的非python嵌套列表中提取数据(也许是json数据?)
问题描述
我有一堆要解析的数据,我已经设法将所有这些数据放入数据库中,但最后一部分让我感到困惑,将日期以“不错”的格式输入数据库。如果我能弄清楚如何从数据中仅提取日期字符串,那么使用 dateparser 应该不难,但这部分真的很吸引我,我的大脑不知道该去哪里。
这是数据的格式。可能还有其他键值对。
[("[{'key': 'Date', 'value': 'Wednesday, 3 March 2021'}]",)]
我所做的唯一一件远程有用的事情就是弄清楚 python 将允许我列出键值对
[{'key': 'Date', 'value': 'Wednesday, 3 March 2021'}]
使用
data = [("[{'key': 'Date', 'value': 'Wednesday, 3 March 2021'}]",)]
for a in data:
for b in a:
print(b)
数据格式为:
[("[{'key': 'key1', 'value': 'value1'}]", "[{'key': 'key2', 'value': 'value2'}]", "[{'key': 'key3', 'value': 'value3'}]")]
我可以暴力破解它,尽管我知道这很简单,但我无法弄清楚。任何有关寻找优雅和正确解决方案的帮助表示赞赏。
这是我想要的代码,感谢@Kraigolas
data = [("[{'key': 'Date', 'value': 'Wednesday, 3 March 2021'}]",)]
for a in data:
data = [eval(element)[0] for element in a]
if(data[0]['key'] == "Date"):
print(data[0]['value'])
解决方案
这个问题可以通过几个步骤来解决。
要开始这个问题,让:
data = [("[{'key': 'key1', 'value': 'value1'}]", "[{'key': 'key2', 'value': 'value2'}]", "[{'key': 'key3', 'value': 'value3'}]")]
寻址元组
您的列表中有一个完整的元组。让我们抓住元组并使用它来代替。
data = data[0]
# ("[{'key': 'key1', 'value': 'value1'}]", "[{'key': 'key2', 'value': 'value2'}]", "[{'key': 'key3', 'value': 'value3'}]")
处理字符串
请注意,元组中的元素看起来像这样
element = "[{'key': 'key1', 'value': 'value1'}]"
如果它不是字符串,那将是列表中的字典!让我们使用eval
命令以这种形式获取它:
element = eval(element)
# [{'key': 'key1', 'value': 'value1'}]
摆脱外部列表
为了摆脱列表,我们抓住第 0 个元素来只取回字典
element = element[0]
# {'key': 'key1', 'value': 'value1'}
获取数据
返回日期的“价值”索引。
element = element["value"]
# "value1"
把这一切放在一个列表理解中
dates = [eval(element)[0]["value"] for element in data[0]]
# ['value1', 'value2', 'value3']
推荐阅读
- javascript - 如何从Firefox上的扩展资源加载html页面
- c# - 使用模型绑定下拉列表会引发错误
- mysql - 列出按特定值计数排序的数据
- firebase - 等待嵌套的未来函数在 Dart 中完成
- macos - tns run 不会在 Mac 的模拟器中加载应用程序
- ionic-framework - 打字稿错误找不到'cordova-plugin-ionic'的类型定义文件
- java - 提交远程命令时出错:sun/misc/BASE64Encoder: sun.misc.BASE64Encoder
- sql - 在 SQL 中重新创建移动中位数和移动模式 Excel 公式
- flutter - 如何在 GCP App Engine 上部署 Flutter Web App
- python-3.x - pip3 安装 cbor2 抛出 UnicodeDecodeError