如何从csv文件中创建以列表作为值的字典?

2024-04-25 06:10:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含19列的csv文件,并希望将其作为一个字典,前2列作为键(可能是一个元组或只是将它们合并为一个字符串),然后所有其他17列作为值列表。excel文件如下:image of the cvs file

我想要一本这样的字典:

d1 = { "A , 222" : [1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1]}  
d2={"B, 223" : [1,1,1,1,0,0,0,1,1,0,0,1,1,1,1,1]}
d3 = {....}

....

Tags: 文件ofcsvthe字符串image列表字典
3条回答

下面是一个使用^{}的解决方案

from csv import reader

d = {}
with open('infile.csv', newline='') as f:
    r = reader(f)
    for row in r:
        if not row:
            continue # Handles blank rows
        key1, key2, *value = row
        d[(key1, key2)] = value

编辑:

key1, key2, *value = row只能在python3中使用。如果该功能对您不可用,您可以使用

key1, key2 = row[:2]
value = row[2:]

你是这个意思吗?你知道吗

res = {}
with open(fileName.csv, "r") as f:
    text = f.readlines()
    for line in text[1:]:
        part = line.strip().split(",")
        key  = ",".join(part[:2])
        value = [int(i) for i in part[2:]]
        res[key] = value

使用csv.reader文件你可以这样做:

代码:

as_dict = {'{}, {}'.format(*row[:2]): row[2:] for row in reader if row}

测试代码:

data = StringIO(''.join('\n'.join(x.strip() for x in u"""
    A,222,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1  
    B,223,1,1,1,1,0,0,0,1,1,0,0,1,1,1,1,1
    """.split('\n')[1:-1])))

reader = csv.reader(data)
as_dict = {'{}, {}'.format(*row[:2]): row[2:] for row in reader if row}
print(as_dict)

结果:

{
    'A, 222': ['1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1'], 
    'B, 223': ['1', '1', '1', '1', '0', '0', '0', '1', '1', '0', '0', '1', '1', '1', '1', '1']
}

相关问题 更多 >