如何将CSV数据转换为字典

时间:2013-12-01 20:00:21

标签: python csv python-3.x dictionary

我有一个CSV文件,我将通过此代码打开:

open(file,"r")

当我读取文件时,我得到输出:

['hello', 'hi', 'bye']
['jelly', 'belly', 'heli']
['red', 'black', 'blue']

我想要输出这样的东西:

{hello:['jelly','red'], hi:['belly','black'], 'bye':['heli','blue']}

但我不知道如何

4 个答案:

答案 0 :(得分:2)

您可以使用collections.defaultdictcsv.DictReader

>>> import csv
>>> from collections import defaultdict
>>> with open('abc.csv') as f:
    reader = csv.DictReader(f)
    d = defaultdict(list)
    for row in reader:
        for k, v in row.items():
           d[k].append(v)
...            
>>> d
defaultdict(<type 'list'>,
{'hi': ['belly', 'black'],
 'bye': ['heli', 'blue'],
 'hello': ['jelly', 'red']})

答案 1 :(得分:0)

yourHash = {}

with open(yourFile, 'r') as inFile:
    for line in inFile:
        line = line.rstrip().split(',')
        yourHash[line[0]] = line[1:]

这假设每个键对于一行是唯一的。如果没有,则必须将其修改为:

yourHash = {}

with open(yourFile, 'r') as inFile:
    for line in inFile:
        line = line.rstrip().split(',')

        if line[0] in yourHash:
            yourHash[line[0]] += line[1:]
        else:
            yourHash[line[0]] = line[1:]

当然,您可以使用csv,但我认为有人肯定会发布,所以我提供了另一种方法。祝你好运!

答案 2 :(得分:0)

csv = [
  ['hello', 'hi', 'bye'],
  ['jelly', 'belly', 'heli'],
  ['red', 'black', 'blue'],
]

csv = zip(*csv)

result = {}
for row in csv:
  result[row[0]] = row[1:]

答案 3 :(得分:0)

您可以使用csv,读取第一行以获取标题,创建与标题对应的列表数,然后创建dict:

import csv

with open(ur_csv) as fin:
    reader=csv.reader(fin, quotechar="'", skipinitialspace=True)
    header=[[head] for head in next(reader)]
    for row in reader:
        for i, e in enumerate(row):
            header[i].append(e)

data={l[0]:l[1:] for l in header}            
print(data)     
# {'hi': ['belly', 'black'], 'bye': ['heli', 'blue'], 'hello': ['jelly', 'red']}     

如果您想要更简洁的内容,可以使用Jon Clements excellent solution

with open(ur_csv) as fin:
    csvin = csv.reader(fin, quotechar="'", skipinitialspace=True)
    header = next(csvin, [])
    data=dict(zip(header, zip(*csvin)))
    # {'bye': ('heli', 'blue'), 'hello': ('jelly', 'red'), 'hi': ('belly', 'black')}

但如果重要的话,那会产生一个元组字典......

如果你的csv文件很大,你可能想要重写它来逐行生成一个字典(类似于DictReader):

import csv

def key_gen(fn):
    with open(fn) as fin:
        reader=csv.reader(fin, quotechar="'", skipinitialspace=True)
        header=next(reader, [])
        for row in reader:
            yield dict(zip(header, row))

for e in key_gen(ur_csv):
    print(e)
# {'hi': 'belly', 'bye': 'heli', 'hello': 'jelly'}
  {'hi': 'black', 'bye': 'blue', 'hello': 'red'}    etc...