使用与键相同的列从CSV创建多个Python词典

时间:2015-06-30 15:19:35

标签: python csv dictionary

我有一个csv:

Col1, Col2,   Col3, ...  
10,   0.024,  0.0012, ...  
20,   0.0013, 0.43, ...

我想要一个像这样的词典列表 [{"Col1":"Col2"}, {"Col1": "Col3"},...]
始终将Col1作为每个词典的关键

我试过这个,它适用于第一个字典,但产生空白 所有其他人的词典。

import os, csv
path = r"I:\ARC\WIP\KevinWIP\Risk\Data\PythonGui"
os.chdir(path)
with open('DispersalKernal10m.csv', mode = 'r') as infile:
    reader = csv.reader(infile)
    DistProb_LUT = [
    {rows[0]:rows[1] for rows in reader},
    {rows[0]:rows[2] for rows in reader},
    {rows[0]:rows[3] for rows in reader},
    {rows[0]:rows[4] for rows in reader},
    {rows[0]:rows[5] for rows in reader},
    {rows[0]:rows[6] for rows in reader},
    {rows[0]:rows[7] for rows in reader}]
    infile.close()

print(DistProb_LUT)

搜索周围,我尝试的一切都没有用。任何建议赞赏。

2 个答案:

答案 0 :(得分:0)

为了创建第一个字典本身,您循环遍历整个文件并到达文件末尾,因此对于所有其他字典,您的文件光标始终处于结束状态,因此所有其他字典都是空的。不要像这样进行字典理解,而是在字典创建部分之外使用for循环并稍微改变逻辑,如下所示 -

import os, csv
path = r'I:\ARC\WIP\KevinWIP\Risk\Data\PythonGui'
os.chdir(path)
DistProb_LUT = [{} for _ in range(7)]
with open('DispersalKernal10m.csv', mode = 'r') as infile:
    reader = csv.reader(infile)
    for rows in reader:
        for i in range(7):
            DistProb_LUT[i][rows[0]] = rows[i+1]

您也无需关闭infile,因为它会被with语句自动关闭。

答案 1 :(得分:-1)

读取文件通常不是一种可以连续重复多次而无需重新打开文件的操作。因此,这样的事情对您有用:

import os, csv
path = r'I:\ARC\WIP\KevinWIP\Risk\Data\PythonGui'
os.chdir(path)
DistProb_LUT = [{} for i in range(7)]
with open('DispersalKernal10m.csv', mode = 'r') as infile:
    reader = csv.reader(infile)
    for row in reader:
        DistProb_LUT[0][row[0]] = row[1]
        DistProb_LUT[1][row[0]] = row[2]
        DistProb_LUT[2][row[0]] = row[3]
        DistProb_LUT[3][row[0]] = row[4]
        DistProb_LUT[4][row[0]] = row[5]
        DistProb_LUT[5][row[0]] = row[6]
        DistProb_LUT[6][row[0]] = row[7]

print(DistProb_LUT)

另外,您不需要infile.close()行。 with声明为您解决了这个问题。