首页 > 解决方案 > 从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'])

标签: pythonjsonlistparsingtuples

解决方案


这个问题可以通过几个步骤来解决。

要开始这个问题,让:

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']

推荐阅读