【问题标题】:Convert a String into python list that is already in list format将字符串转换为已经是列表格式的python列表
【发布时间】:2015-03-20 12:43:39
【问题描述】:

我将用户的电子邮件存储在数据库中,如下所示。

['abc@gmai.com','abc@gmail.com','abc@gmail.com']

我必须一一获取所有用户的每封电子邮件。查询后我写了以下代码。

    cur.execute("sql query")
                rows = cur.fetchall()
                for row in rows:
                    print row[2]
                    print type(row[2])
                    emails = json.loads(json.dumps(row[2]))
                    print type(emails)

<type 'str'>
<type 'unicode'>

它将其转换为 Unicode 而不是列表。

【问题讨论】:

  • SQL 查询返回一个列表?预期的输出是什么?
  • sql 查询返回一个记录列表,我还通过print row[2] 对其进行了检查,它打印了我上面显示的所有电子邮件列表。你可以在代码中看到它说它是字符串。
  • @MTaqi:repr(row[2]) 产生了什么?
  • 无论如何,json.dumps() 然后json.loads() 将不起作用,即使该行包含某种 JSON 数据。
  • @MTaqi:使用json.dumps(something) 会生成something 的JSON 编码,然后再使用json.loads() 对其进行解码。您刚刚编码为 JSON,然后再次解码该编码。唯一可以实现的是您测试一个字符串是否可以进行 JSON 编码(可以),结果是一个 Unicode 字符串,其内容与您开始时的内容相同。

标签: python json list unicode


【解决方案1】:

您的row[2] 是一个字符串。要将其转换为列表,您可以使用 ast.literal_eval:

In [29]: text = "['abc@gmai.com','abc@gmail.com','abc@gmail.com']"

In [30]: import ast

In [31]: ast.literal_eval(text)
Out[31]: ['abc@gmai.com', 'abc@gmail.com', 'abc@gmail.com']

In [32]: type(ast.literal_eval(text))
Out[32]: list

【讨论】:

  • 没有正在构建的列表。 OP 正在将每个电子邮件地址转换为 JSON 格式并返回。
  • 他显示print row[2] 打印['abc@gmai.com','abc@gmail.com','abc@gmail.com']。请注意,有三个打印语句和三行输出。
  • 我不相信是这样的。此外,一些数据库允许在查询时解码列中的 JSON 结果。例如,请参阅initd.org/psycopg/docs/extras.html#json-adaptation
  • 并且print 语句在代码中 与在代码下面 生成的输出不匹配。答案顶部的列表不一定是正在打印的row[2]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 2018-07-18
相关资源
最近更新 更多