使用标准库/模块从python中的矩阵(csv)创建dict或列表

使用标准库/模块从python中的矩阵(csv)创建dict或列表,python,csv,dictionary,matrix,multidimensional-array,Python,Csv,Dictionary,Matrix,Multidimensional Array,我有一个csv格式的矩阵,我试图读入它并从中创建一个k:v dict,其中x/y头是键,值是它们映射到的单元格。 我无法使用任何非标准库或模块 csv如下所示: ,A,B,C A,1,9,3 B,6,3,5 C,3,8,8 {AA:1,BA:9,CA:3,AB:6,BB:3,CB:5,AC:3,BC:8,CC:8} 我想让这条记录看起来像这样: ,A,B,C A,1,9,3 B,6,3,5 C,3,8,8 {AA:1,BA:9,CA:3,AB:6,BB:3,CB:5,AC:3,BC:8

我有一个csv格式的矩阵,我试图读入它并从中创建一个k:v dict,其中x/y头是键,值是它们映射到的单元格。 我无法使用任何非标准库或模块

csv如下所示:

 ,A,B,C
A,1,9,3
B,6,3,5
C,3,8,8
{AA:1,BA:9,CA:3,AB:6,BB:3,CB:5,AC:3,BC:8,CC:8}
我想让这条记录看起来像这样:

 ,A,B,C
A,1,9,3
B,6,3,5
C,3,8,8
{AA:1,BA:9,CA:3,AB:6,BB:3,CB:5,AC:3,BC:8,CC:8}
到目前为止,我所拥有的:

matrixDict=defaultdict(list)
with open("/path/to/substitutionMatrix.csv", "rb") as confusion_data:
    reader = csv.reader(confusion_data, dialect = csv.excel, delimiter = ',')
    headers = reader.next()
    i,j=1,1
    for row in reader:
        x=row[0]+headers[i]+(row[j])
        for y in row:
             matrixDict[x]=y
但这不起作用,它给了我一个带列表的键,而不是该键应该映射到的单元格值。

试试:

import csv
from collections import defaultdict

matrixDict=defaultdict(list)
with open("m.csv", "r") as confusion_data:
    reader = csv.reader(confusion_data, dialect = csv.excel, delimiter = ',')
    headers = reader.next()

    for row in reader:
        for i in range(1,len(headers)):
            matrixDict[headers[i]+row[0]] = row[i]

print matrixDict
试试这个:

#!/usr/bin/python

import csv

matrixDict = dict()
with open('csv', 'r') as confusion_data:
    reader = csv.reader(confusion_data, dialect=csv.excel, delimiter=',')
    headers = reader.next()
    for row in reader:
        header_index = 1
        for col in row[1:]:
            key = headers[header_index] + row[0]
            matrixDict[key] = col
            header_index += 1

print matrixDict
对于作为名为“csv”的文件的给定输入,它将输出

{'AA': '1', 'AC': '3', 'AB': '6', 'BA': '9', 'BB': '3', 'BC': '8', 'CC': '8', 'CB': '5', 'CA': '3'}

您告诉它创建一个列表(append),而不是为dict设置一个键,赋值应该是matrixDict[x]=y,但是循环也不完全正确,因为您没有处理键中的列标题,这很有帮助(我将编辑问题以反映正确的赋值)。但我仍然不知道如何处理列标题。这非常有效。我添加了一些关于的第二个
循环的解释,作为我自己的理智检查。如果有任何错误,请随意改变。谢谢