如何使用Python从CSV文件创建具有key:value格式的字典列表?

时间:2017-08-21 21:31:52

标签: python csv dictionary

enter image description here

希望列标题作为键,而不包含任何引号,列中的后续值作为键的值。

这是我到目前为止所做的:

chown

2 个答案:

答案 0 :(得分:1)

您可以在python中使用pandas库来处理:

这是一个通用的可重复示例(您需要安装pandas)

from StringIO import StringIO 
import pandas as pd 

data = """
col1|col2
1|2
21|2
14|2
12|42
10|2
1|27
""" 

# StringIO(data) to simulate a csv file 
# replace it with the name of your csv file 
df = pd.read_csv(StringIO(data), sep="|")

print(df.to_dict(orient="records"))

输出如下:

[{'col2': 2, 'col1': 1}, {'col2': 2, 'col1': 21}, {'col2': 2, 'col1': 14}, {'col2': 42, 'col1': 12}, {'col2': 2, 'col1': 10}, {'col2': 27, 'col1': 1}]

对于您的具体情况,您需要执行以下操作

import pandas as pd 
df = pd.read_csv("zinc3.csv", sep="|")    
print(df.to_dict(orient="records"))

答案 1 :(得分:0)

如果我理解正确,请给出一个文件:

# test.csv
1,2,3
a_foo,b_foo,c_foo
a_bar,b_bar,c_bar

您可以使用数字标题创建字典,如下所示:

import csv
import collections as ct


with open("./test.csv") as f:
    reader = csv.DictReader(f)
    dd = ct.defaultdict(list)
    for row in reader:
        for k, v in row.items():
            dd[int(k)].append(v)
dd

输出

defaultdict(list,
            {1: ['a_foo', 'a_bar'],
             2: ['b_foo', 'b_bar'],
             3: ['c_foo', 'c_bar']})

您必须替换文件名。 DictReader为每一行生成一个字典,其中键是标题,值是每列的后续项。这里我们通过将值附加到defaultdict来重建字典。键(假定数字)将转换为整数。

对于小文件,您可以使用列表解析来压缩此代码:

with open("./test.csv") as f:
    reader = csv.DictReader(f)
    dd = ct.defaultdict(list)
    [dd[int(k)].append(v) for row in reader for k, v in row.items()]

dd