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

时间:2018-02-28 02:44:59

标签: python list csv dictionary

我有一个包含19列的csv文件,并希望将其作为字典,前两列是键(可能是一个元组或只是将它们合并为一个字符串),然后所有其他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 = {....}

....

3 个答案:

答案 0 :(得分:2)

以下是使用csv.reader

的解决方案
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仅适用于Python 3.如果您无法使用该功能,则可以使用

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

答案 1 :(得分:0)

你的意思是?

--log-req-encoder

答案 2 :(得分:0)

使用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']
}