如何将带有分隔符的重复列表元素转换为列表?

时间:2016-07-20 13:46:51

标签: python list csv

我导入的CSV文件基本上是一个包含5个标题的表和包含5个元素的数据集。

使用此代码,我将该数据转换为具有5位信息的个人列表(列表中的列表):

import csv
readFile = open('Category.csv','r')
categoryList = []
for row in csv.reader(readFile):
    categoryList.append(row)
readFile.close()

现在我有一个列表[[a,b,c,d,e],[a,b,c,d,e],[a,b,c,d,e]...]

但是,整个列表中每个列表中的元素2(categoryList[i][2])或“c”是由可变长度的分隔符(“:”)分隔的字符串。如何将元素2转换为列表本身?基本上看起来像这样:

[[a,b,[1,2,3...],d,e][a,b,[1,2,3...],d,e][a,b,[1,2,3...],d,e]...]

我考虑循环遍历每个列表元素并查找元素2,然后使用.split(':')命令将这些值分开。

4 个答案:

答案 0 :(得分:1)

您建议的解决方案是可行的。阅读文件后,您无需执行此操作。你可以在把它当作输入的时候做到这一点。

profileChangeRequest

编辑:我想你知道分割功能的目的。所以我会解释for row in csv.reader(readFile): row[2] = row[2].split(":") # Split element 2 of each row before appending categoryList.append(row)

您有row[2]这样的数据,这意味着每个[[a,b,c,d,e],[a,b,c,d,e],[a,b,c,d,e]...]都像row[a,b,c,d,e][a,b,c,d,e],所以每一行[2]对应于[a,b,c,d,e]。使用这种方式,您可以在追加之前更改所有c并将其转换为c

答案 1 :(得分:0)

您可以在每一行上使用列表理解,并将包含':'的项目拆分为新的子列表

for row in csv.reader(readFile):
    new_row = [i.split(':') if ':' in i else i for i in row]
    categoryList.append(new_row)

如果您在':'上需要拆分的行中还有其他项目,则此方法有效。

否则,如果您只有一个包含':'的项目,则可以直接拆分索引:

for row in csv.reader(readFile):
    row[2] = row[2].split(':')
    categoryList.append(row)

答案 2 :(得分:0)

关于你的结构并不是很清楚,但是如果c是一个字符串,请分开:然后尝试

  

列表(c.split(':'))

让我知道它是否解决了您的问题

答案 3 :(得分:0)

假设你有这样一行:

row = ["foo", "bar", "1:2:3:4:5", "baz"]

要将项目[2]转换为子列表,您可以使用

row[2] = row[2].split(":")  # elements can be assigned to, yawn.

现在行是['foo', 'bar', ['1', '2', '3', '4', '5'], 'baz']

移植拆分项目移至"顶层"该行,你可以使用

row[2:3] = row[2].split(":")  # slices can be assigned to, too, yay!

现在行是['foo', 'bar', '1', '2', '3', '4', '5', 'baz']

这当然会跳过对行数据的任何防御性检查(可以将它分开吗?),这是一个真正强大的应用程序应该具有的。