如何从 CSV 创建一个双重嵌套的字典?

How to create a doubly-nested dict from CSV?

我正在尝试使用 Python 读取财务 CSV,数据如下所示:

Company1;2018;12345;67890;
Company1;2019;34242;12313;
Company2;2018;12412;32423;
Company3;2017;12314;23554;
...

我正在搜索的是一个函数,它在阅读此 CSV 后会给我以下结果:

Dict2 = {
   Company1: { 2018: { Costs: 123, employes: 1231}
               2019: { Costs: 231, employes: 1321}}
   Company2: { 2019: { Costs: 123, employes: 1231}
   Company3: { 2019: { Costs: 123, employes: 1231}
        }

我正在这样处理 CSV:

file2 = open(pfad_ordner + "\daten\standortdaten\FirmenBilanz.csv", "r")

reader = csv.reader(file2, delimiter =";")

Dict2 = {}

for row in reader:
    Dict2[row[0]] = {"Jahr":row[2], "Ort":row[1], "Mitarbeiter_gewerblich": row[3]}

如果我这样做,python 会忽略具有相同公司名称的行。或者更确切地说,它更新了字典,因此每个公司密钥只存储了一行。

集合模块中的 defaultdict class 可以帮助您。

您将创建 Dict2 作为一个字典,用于存储其他字典:

Dict2 = defaultdict(dict)

现在,您可以提供公司名称作为键,并为该键赋予一个值,该值是您当年的“子字典”,其他值作为字典...全部在一个语句中:

Dict2['Foo, inc.']['2018'] = {'Cost': 23, 'Employees': 9}

这里整理一下:

import csv
from collections import defaultdict

file2 = open(pfad_ordner + "\daten\standortdaten\FirmenBilanz.csv", "r")

reader = csv.reader(file2, delimiter =";")

Dict2 = defaultdict(dict)

for row in reader:
    name = row[0]
    year = row[1]
    Dict2[name][year] = { 'other values from row' }