从 Python 中的 csv 创建字典中的字典列表

Posted

技术标签:

【中文标题】从 Python 中的 csv 创建字典中的字典列表【英文标题】:Create a list of dictionaries in a dictionary from csv in Python 【发布时间】:2014-11-11 13:00:08 【问题描述】:

我有一个如下所示的 csv:

Name;Category;Address
McFood;Fast Food;Street 1
BurgerEmperor;Fast Food;Way 1
BlueFrenchHorn;French;Street 12
PetesPizza;Italian;whatever
SubZero;Fast Food;Highway 6

我想创建一个以类别为键的字典和一个以剩余数据为值的字典列表。所以它应该是这样的:

'Fast Food' : ['Name': 'McFood', 'Address': 'Street 1', 
                'Name': 'BurgerEmperor', 'Address': 'Way 1'],
                ...],
 'French' : ['Name': 'BlueFrenchHorn', 'Address': 'Street12'],
...

(此处缩进以提高可读性)。

我像下面的 sn-p 一样尝试过,但我没有从那里得到任何结果:

import csv
mydict=

with open ('food.csv', 'r') as csvfile:
        #sniff to find the format
        fileDialect = csv.Sniffer().sniff(csvfile.read(1024))
        csvfile.seek(0)
        #read the CSV file into a dictionary
        dictReader = csv.DictReader(csvfile, dialect=fileDialect)
        for row in dictReader:
            mycategory= row["Category"]
            del row("Category")
            mydict[mycategory]=row

【问题讨论】:

【参考方案1】:

使用collections.defaultdict

import csv
from collections import defaultdict

mydict = defaultdict(list)  # <---

with open ('food.csv', 'r') as csvfile:
    fileDialect = csv.Sniffer().sniff(csvfile.read(1024))
    csvfile.seek(0)
    dictReader = csv.DictReader(csvfile, dialect=fileDialect)
    for row in dictReader:
        mycategory= row.pop("Category")
        mydict[mycategory].append(row)  # Will put a list for not-existing key

mydict = dict(mydict)  # Convert back to a normal dictionary (optional)

【讨论】:

以上是关于从 Python 中的 csv 创建字典中的字典列表的主要内容,如果未能解决你的问题,请参考以下文章

从 Python 中的 csv 创建字典中的字典列表

从两个熊猫系列(csv的列作为DataFrame)创建元素字典

从 CSV 数据流 python 创建一个字典

Python:如何从列表中的字典创建 DataFrame 列 [重复]

Python Killed: 9 在使用从 2 个 csv 文件创建的字典运行代码时

将python字典写入CSV列:第一列的键,第二列的值