使用标准库/模块从python中的矩阵(csv)创建dict或列表
我有一个csv格式的矩阵,我试图读入它并从中创建一个k:v dict,其中x/y头是键,值是它们映射到的单元格。 我无法使用任何非标准库或模块 csv如下所示:使用标准库/模块从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
,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,但是循环也不完全正确,因为您没有处理键中的列标题,这很有帮助(我将编辑问题以反映正确的赋值)。但我仍然不知道如何处理列标题。这非常有效。我添加了一些关于的第二个
循环的解释,作为我自己的理智检查。如果有任何错误,请随意改变。谢谢