4

我编写了一个脚本,该脚本在某一时刻生成一堆空列表,应用具有以下结构的代码:

A,B,C,D=[],[],[],[]

产生输出:

A=[]
B=[]
C=[]
D=[]

现在的方式是,每次使用不同的数据集作为输入时,我都必须手动修改字母。我希望能够自动化。我想过这样做:

FieldList=[A,B,C,D]
bracket=[]
[[0]for field in FieldList]
for field in FieldList:
    bracket=bracket+["[]"]
FieldList=bracket                  

在这里,我试图复制“A,B,C,D=[],[],[],[]”,但显然它不是这样工作的。

我也试过:

FieldList=[A,B,C,D]
bracket=[]
[[0]for field in FieldList]
for field in FieldList:
    field=[]

但最后它只产生一个列表调用“字段”。

#

所以,这就是我需要的列表。我将从 csv 读取信息并将我从每一行提取的数据添加到列表中。如果生成“列表列表”,我仍然可以单独调用它们中的每一个以将内容附加到它们吗?

A,B,C,D=[],[],[],[]
with open(csvPath+TheFile, 'rb') as csvfile:    #Open the csv table
    r = csv.reader(csvfile, delimiter=';')      #Create an iterator with all the rows of the csv file, indicating the delimiter between columns
    for i,row in enumerate(r):                  #For each row in the csv
        if i > 0:                               #Skip header 
            A.append(float(row[0]))             #Extract the information and append it to each corresponding list
            B.append(float(row[1]))
            C.append(format(row[2]))
            D.append(format(row[3]))
4

4 回答 4

9

你把事情复杂化了。只需使用列表或字典:

fields = {key: [] for key in 'ABCD'}

然后根据需要参考fields['A']等,或循环遍历结构以依次处理每个。

于 2013-04-11T16:16:21.837 回答
1
dict((k, []) for k in ['A','B','C','D'])
于 2013-04-11T16:20:58.230 回答
1

根据您的使用示例,您真正想要的是zip()

对于此示例,请注意,csv.reader()基本上将文件分解为以下形式的数据:

[
    ["a1", "b1", "c1", "d1"],
    ["a2", "b2", "c2", "d2"],
    ...,
    ["an", "bn", "cn", "dn"]
]

这个例子:

table = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
    ]

#How to transpose the data into columns??? Easy!

columns = zip(*table)

现在,您有一个columns形式为 的变量:

columns = [
    [1, 5, 9],
    [2, 6, 10],
    [3, 7, 11],
    [4, 8, 12]
]

好的,让我们将其应用于 csv 文件:

with open("mycsv.csv", "rb") as infile:
    reader = csv.reader(infile, delimiter=";")
    next(reader, None) #skip the header
    columns = zip(*reader)

就是这样!

注意:对于此示例,我们假设"mycsv.csv"每行中的列数正确。您可能需要实施检查以确保所有行都“填充”。

于 2013-04-11T16:32:10.780 回答
0

在此处检查接受的答案。(回答点击或不点击)

>>> obj = {}
>>> for i in range(1, 21):
...     obj['l'+str(i)] = []
... 
>>>obj
{'l18': [], 'l19': [], 'l20': [], 'l14': [], 'l15': [], 'l16': [], 'l17': [], 'l10': [], 'l11': [], 'l12': [], 'l13': [], 'l6': [], 'l7': [], 'l4': [], 'l5': [], 'l2': [], 'l3': [], 'l1': [], 'l8': [], 'l9': []}
>>> 
于 2014-06-25T15:07:55.953 回答