【问题标题】:spliting comma separated values and storing in separate row in python 3.x?在 python 3.x 中拆分逗号分隔值并存储在单独的行中?
【发布时间】:2019-01-06 12:14:21
【问题描述】:

我有以下 python 列表:

original =    [(7782, 'Mandarin, Chinese'), 
(7783, 'Italian, Conversational Spanish'), 
(7792, 'Spanish, English'), 
(7793, 'English, Italian')]

我想要的结果是这样的:

[(7782, 'Mandarin'),
(7782, 'Chinese'),
(7783, 'Italian'),
(7783, 'Coversational Spanish'),
(7792, 'Spanish'),
(7792, 'English'),
(7793, 'English'),
(7793, 'Italian') ]

我是 python 新手。我怎样才能做到这一点?到目前为止我的代码是这样的:

import pymysql
db = pymysql.connect("localhost","root","123456","itutor" )
cursor = db.cursor()
query = "SELECT distinct user_id, language from table;"
cursor.execute(query)
r = list(cursor.fetchall())
db.close()
r2 = r[0][1].split(",")

【问题讨论】:

  • 您能否通过访问数据库并更改那里的数据来实现您的目标?我的意思是您可以访问命令行界面并处理合适的 SQL 查询吗?
  • 语言数量不固定。我无法使用查询。
  • 这听起来不像是不通过查询来做的理由。递归 CTE 可能能够实现您想要的。那么,你可以使用命令行界面吗?
  • 是的,我可以。 CTE 在 MySQL 5.5 中不可用。此外,使用编程语言更容易做到这一点

标签: python string python-3.x list list-comprehension


【解决方案1】:

假设您无法在上游解决问题,您可以使用嵌套列表推导:

res = [(num, lang) for num, languages in original for lang in languages.split(', ')]

[(7782, 'Mandarin'),
 (7782, 'Chinese'),
 (7783, 'Italian'),
 (7783, 'Conversational Spanish'),
 (7792, 'Spanish'),
 (7792, 'English'),
 (7793, 'English'),
 (7793, 'Italian')]

要了解它是如何构造的,请考虑等效的 for 循环:

res = []
for num, languages in original:
    for lang in languages.split(', '):
        res.append((num, lang))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2018-12-25
    • 2015-04-01
    • 1970-01-01
    • 2010-10-23
    • 2014-01-03
    相关资源
    最近更新 更多