簡體   English   中英

使用與鍵相同的列從CSV創建多個Python詞典

[英]Create Multiple Python dictionaries from CSV using same column as key

我有一個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)

到處搜索,我嘗試的所有內容均無效。 任何建議表示贊賞。

為了創建第一個字典本身,您要遍歷整個文件並到達文件的末尾,因此對於所有其他字典,文件光標始終位於末尾,因此所有其他字典均為空。 與其像那樣進行字典理解,不如在字典創建部分之外使用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語句自動關閉。

讀取文件通常不是一項操作,您可以連續多次重復此操作而無需重新打開文件。 因此,這樣的事情可能對您有用:

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語句可以幫助您解決該問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM