Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将csv文件转换为字典列表_Python_List_Csv_Dictionary - Fatal编程技术网

Python 将csv文件转换为字典列表

Python 将csv文件转换为字典列表,python,list,csv,dictionary,Python,List,Csv,Dictionary,我有一个csv文件 col1, col2, col3 1, 2, 3 4, 5, 6 我想从这个csv创建一个字典列表 输出为: a= [{'col1':1, 'col2':2, 'col3':3}, {'col1':4, 'col2':5, 'col3':6}] 如何执行此操作?使用csv模块和列表理解: import csv with open('foo.csv') as f: reader = csv.reader(f, skipinitialspace=True) h

我有一个csv文件

col1, col2, col3
1, 2, 3
4, 5, 6
我想从这个csv创建一个字典列表

输出为:

a= [{'col1':1, 'col2':2, 'col3':3}, {'col1':4, 'col2':5, 'col3':6}]

如何执行此操作?

使用
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    
输出:

[{'col3': 3, 'col2': 2, 'col1': 1}, {'col3': 6, 'col2': 5, 'col1': 4}]
使用:

将导致:

[{'col2': 2, 'col3': 3, 'col1': 1}, {'col2': 5, 'col3': 6, 'col1': 4}]

好吧,当其他人以聪明的方式做这件事的时候,我天真地实现了它。我认为我的方法的优点是不需要任何外部模块,尽管它可能会因为奇怪的值配置而失败。此处仅供参考:

a = []
with open("csv.txt") as myfile:
    firstline = True
    for line in myfile:
        if firstline:
            mykeys = "".join(line.split()).split(',')
            firstline = False
        else:
            values = "".join(line.split()).split(',')
            a.append({mykeys[n]:values[n] for n in range(0,len(mykeys))})

将CSV解析为字典列表的简单方法

with open('/home/mitul/Desktop/OPENEBS/test.csv', 'rb') as infile:
  header = infile.readline().split(",")
  for line in infile:
    fields = line.split(",")
    entry = {}
    for i,value in enumerate(fields):
      entry[header[i].strip()] = value.strip()
      data.append(entry)

另一个更简单的答案是:

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

对于懒惰者,从链接页面-
skipinitialspace
:当
True
时,将忽略紧跟在分隔符后面的空格。@falsetru,下面是为什么输出不是按此顺序出现的?[{'col1':1,'col2':2,'col3':3},{'col1':4,'col2':5,'col3':6}]@V-T,如果您使用Python3.6+,OrderedDict保证顺序:@hpy,因为Python3.7+,dict的插入顺序是有保证的。=>别担心,只要使用DictReader:)@hpy,它在>Python数据模型改进:>中提到,dict对象的插入顺序保留性质已被声明为Python语言规范的一个正式部分。只有使用相同顺序的csv才能得到答案。这会将其转换为元组列表,而不是dict?
with open('/home/mitul/Desktop/OPENEBS/test.csv', 'rb') as infile:
  header = infile.readline().split(",")
  for line in infile:
    fields = line.split(",")
    entry = {}
    for i,value in enumerate(fields):
      entry[header[i].strip()] = value.strip()
      data.append(entry)
    import csv
    with open("configure_column_mapping_logic.csv", "r") as f:
        reader = csv.DictReader(f)
        a = list(reader)
        print a