将csv文件转换为词典列表

vee*_*ena 33 python csv dictionary list

我有一个csv文件

col1, col2, col3
1, 2, 3
4, 5, 6
Run Code Online (Sandbox Code Playgroud)

我想从这个csv创建一个字典列表.

输出为:

a= [{'col1':1, 'col2':2, 'col3':3}, {'col1':4, 'col2':5, 'col3':6}]
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

fal*_*tru 62

用途csv.DictReader:

import csv

with open('test.csv') as f:
    a = [{k: int(v) for k, v in row.items()}
        for row in csv.DictReader(f, skipinitialspace=True)]
Run Code Online (Sandbox Code Playgroud)

  • 对于懒惰的人,从链接页面 - `skipinitialspace`:当 `True` 时,紧跟在分隔符之后的空格将被忽略。 (3认同)
  • @falsetru,这里为什么不按此顺序输出?[{'col1':1,'col2':2,'col3':3},{'col1':4,'col2':5,'col3':6}] (2认同)
  • @VT,如果您使用Python 3.6+,OrderedDict保证订单:https://docs.python.org/3/library/csv.html#csv.DictReader (2认同)
  • @hpy,从Python 3.7+开始,保证了dict的插入顺序。https://mail.python.org/pipermail/python-dev/2017-December/151283.html => 别担心,只需使用 DictReader :) (2认同)

小智 28

另一个更简单的答案:

    import csv
    with open("configure_column_mapping_logic.csv", "r") as f:
        reader = csv.DictReader(f)
        a = list(reader)
        print a
Run Code Online (Sandbox Code Playgroud)


Ash*_*ary 7

使用csv模块和列表理解:

import csv
with open('foo.csv') as f:
    reader = csv.reader(f, skipinitialspace=True)
    header = next(reader)
    a = [dict(zip(header, map(int, row))) for row in reader]
print a    
Run Code Online (Sandbox Code Playgroud)

输出:

[{'col3': 3, 'col2': 2, 'col1': 1}, {'col3': 6, 'col2': 5, 'col1': 4}]
Run Code Online (Sandbox Code Playgroud)


Pra*_*dra 6

很长时间后才在这里回答,因为我没有看到任何更新/相关的答案。

df = pd.read_csv('Your csv file path')  
data = df.to_dict('records')
print( data )
Run Code Online (Sandbox Code Playgroud)