将csv中的iTen复制到Python dict或json

2024-09-30 06:16:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这里做了很多搜索,寻找一些可以帮助我的东西,并找到了一些有助于初始json的东西

我有一个以下格式的csv:

STUDENT_ID,FULL_NAME,COURSE_CODE,COURSE_NAME,DISCIPLINE_NAME
1,STUDENT_ONE,GAM,GESTAO AMBIENTAL,BIOQUÍMICA AMBIENTAL
1,STUDENT_ONE,GAM,GESTAO AMBIENTAL,GEOPROCESSAMENTO APLICADO À GESTÃO AMBIENTAL
2,STUDENT_TWO,COM,COMERCIO,FUNDAMENTOS DO COMÉRCIO EXTERIOR
2,STUDENT_TWO,COM,COMERCIO,PROJETO INTEGRADOR II
2,STUDENT_TWO,COM,COMERCIO,LÍNGUA PORTUGUESA III
2,STUDENT_TWO,COM,COMERCIO,QUÍMICA II
2,STUDENT_TWO,COM,COMERCIO, FÍSICA I
2,STUDENT_TWO,COM,COMERCIO,EDUCAÇÃO FÍSICA I
2,STUDENT_TWO,COM,COMERCIO,MATEMÁTICA III
2,STUDENT_TWO,COM,COMERCIO,SOCIOLOGIA III
2,STUDENT_TWO,COM,COMERCIO,FUNDAMENTOS DE CONTABILIDADE APLICADOS AO COMÉRCIO E SERVIÇOS
2,STUDENT_TWO,COM,COMERCIO,BIOLOGIA III
2,STUDENT_TWO,COM,COMERCIO,FILOSOFIA III
3,STUDENT_THREE,TME,TEORIAS E METODOLOGIAS DA EDUCAÇÃO,TRABALHO DE CONCLUSÃO DO CURSO

我能够为COD_CURSO生成json,代码如下:

temp1 = {}

for student in out:
    curso = student.pop("COD_CURSO")
    if not temp1.get(curso, None):
        temp1[curso] = []
    temp1[curso].append(student)

json如下所示:

{
  "GAM": [
    {
      "STUDENT_ID": 1,
      "FULL_NAME": "STUDENT_ONE",
      "COURSE_NAME": "GESTAO AMBIENTAL",
      "DISCIPLINE_NAME": "BIOQUÍMICA AMBIENTAL"
    },
    {
      "STUDENT_ID": 1,
      "FULL_NAME": "STUDENT_ONE",
      "COURSE_NAME": "GESTAO AMBIENTAL",
      "DISCIPLINE_NAME": "GEOPROCESSAMENTO APLICADO À GESTÃO AMBIENTAL"
    }
  ],
  "COM": [
    {
      "STUDENT_ID": 2,
      "FULL_NAME": "STUDENT_TWO",
      "COURSE_NAME": "COMERCIO",
      "DISCIPLINE_NAME": "FUNDAMENTOS DO COMÉRCIO EXTERIOR"
    },
    {
      "STUDENT_ID": 2,
      "FULL_NAME": "STUDENT_TWO",
      "COURSE_NAME": "COMERCIO",
      "DISCIPLINE_NAME": "PROJETO INTEGRADOR II"
    },
    {
      "STUDENT_ID": 2,
      "FULL_NAME": "STUDENT_TWO",
      "COURSE_NAME": "COMERCIO",
      "DISCIPLINE_NAME": "LÍNGUA PORTUGUESA III"
    },
    {
      "STUDENT_ID": 2,
      "FULL_NAME": "STUDENT_TWO",
      "COURSE_NAME": "COMERCIO",
      "DISCIPLINE_NAME": "QUÍMICA II"
    },
    {
      "STUDENT_ID": 2,
      "FULL_NAME": "STUDENT_TWO",
      "COURSE_NAME": "COMERCIO",
      "DISCIPLINE_NAME": " FÍSICA I"
    },
    {
      "STUDENT_ID": 2,
      "FULL_NAME": "STUDENT_TWO",
      "COURSE_NAME": "COMERCIO",
      "DISCIPLINE_NAME": "EDUCAÇÃO FÍSICA I"
    },
    {
      "STUDENT_ID": 2,
      "FULL_NAME": "STUDENT_TWO",
      "COURSE_NAME": "COMERCIO",
      "DISCIPLINE_NAME": "MATEMÁTICA III"
    },
    {
      "STUDENT_ID": 2,
      "FULL_NAME": "STUDENT_TWO",
      "COURSE_NAME": "COMERCIO",
      "DISCIPLINE_NAME": "SOCIOLOGIA III"
    },
    {
      "STUDENT_ID": 2,
      "FULL_NAME": "STUDENT_TWO",
      "COURSE_NAME": "COMERCIO",
      "DISCIPLINE_NAME": "FUNDAMENTOS DE CONTABILIDADE APLICADOS AO COMÉRCIO E SERVIÇOS"
    },
    {
      "STUDENT_ID": 2,
      "FULL_NAME": "STUDENT_TWO",
      "COURSE_NAME": "COMERCIO",
      "DISCIPLINE_NAME": "BIOLOGIA III"
    },
    {
      "STUDENT_ID": 2,
      "FULL_NAME": "STUDENT_TWO",
      "COURSE_NAME": "COMERCIO",
      "DISCIPLINE_NAME": "FILOSOFIA III"
    }
  ],
  "TME": [
    {
      "STUDENT_ID": 3,
      "FULL_NAME": "STUDENT_THREE",
      "COURSE_NAME": "TEORIAS E METODOLOGIAS DA EDUCAÇÃO",
      "DISCIPLINE_NAME": "TRABALHO DE CONCLUSÃO DO CURSO"
    }
  ]
}

我想将重复的学生与他们各自的学科合并如下

{
  "GAM": [
    {
      "STUDENT_ID": 1,
      "FULL_NAME": "STUDENT_ONE",
      "COURSE_NAME": "GESTAO AMBIENTAL",
      "DISCIPLINE_NAME": [
        "BIOQUÍMICA AMBIENTAL",
        "GEOPROCESSAMENTO APLICADO À GESTÃO AMBIENTAL"
      ]
    }
  ],
  "COM": [
    {
      "STUDENT_ID": 2,
      "FULL_NAME": "STUDENT_TWO",
      "COURSE_NAME": "COMERCIO",
      "DISCIPLINE_NAME": [
        "FUNDAMENTOS DO COMÉRCIO EXTERIOR",
        "PROJETO INTEGRADOR II",
        "LÍNGUA PORTUGUESA III",
        "QUÍMICA II",
        "FÍSICA I",
        "EDUCAÇÃO FÍSICA I",
        "MATEMÁTICA III",
        "SOCIOLOGIA III",
        "FUNDAMENTOS DE CONTABILIDADE APLICADOS AO COMÉRCIO E SERVIÇOS",
        "BIOLOGIA III",
        "FILOSOFIA III"
      ]
    }
  ],
  "TME": [
    {
      "STUDENT_ID": 3,
      "FULL_NAME": "STUDENT_THREE",
      "COURSE_NAME": "TEORIAS E METODOLOGIAS DA EDUCAÇÃO",
      "DISCIPLINE_NAME": "TRABALHO DE CONCLUSÃO DO CURSO"
    }
  ]
}

你知道我怎么做吗


Tags: namecomiddostudentfulliiitwo
1条回答
网友
1楼 · 发布于 2024-09-30 06:16:27

这是用python解决的一项伟大任务。您需要转换数据,实际上有很多方法可以做到这一点。现代的方法可能是使用熊猫Pandas使读取CSV数据变得非常容易(pd.read_csv('data.csv'))。然后,您可以使用类似于“groupby”的内容,如本article on GeeksForGeeks中所述

您也可以使用很好的老python。我在下面陈述我的想法

(注意:“导入数据”只是一个字典,其中包含您在问题/示例中以json形式提供的数据。)

from typing import List
import pprint

from data import data


def transform_dict(data: List[dict]) -> dict:
    transformed_data = dict()
    for obj in data:

        current_student = obj['STUDENT_ID']

        new_structure = {
            current_student: {
                'STUDENT_ID': obj['STUDENT_ID'],
                'FULL_NAME': obj['FULL_NAME'],
                'COURSE_NAME': obj['COURSE_NAME'],
                'DISCIPLINE_NAME': [obj['DISCIPLINE_NAME']]
            }
        }

        if current_student not in transformed_data:
            transformed_data.update(new_structure)
            continue

        transformed_data[current_student]['DISCIPLINE_NAME'].append(obj['DISCIPLINE_NAME'])

    return transformed_data


if __name__ == '__main__':
    solution = dict()
    for course, records in data.items():
        solution.update({course: transform_dict(records)})
    pprint.pprint(solution)

这将产生以下数据:

{'COM': {2: {'COURSE_NAME': 'COMERCIO',
             'DISCIPLINE_NAME': ['FUNDAMENTOS DO COMÉRCIO EXTERIOR',
                                 'PROJETO INTEGRADOR II',
                                 'LÍNGUA PORTUGUESA III',
                                 'QUÍMICA II',
                                 ' FÍSICA I',
                                 'EDUCAÇÃO FÍSICA I',
                                 'MATEMÁTICA III',
                                 'SOCIOLOGIA III',
                                 'FUNDAMENTOS DE CONTABILIDADE APLICADOS AO '
                                 'COMÉRCIO E SERVIÇOS',
                                 'BIOLOGIA III',
                                 'FILOSOFIA III'],
             'FULL_NAME': 'STUDENT_TWO',
             'STUDENT_ID': 2}},
 'GAM': {1: {'COURSE_NAME': 'GESTAO AMBIENTAL',
             'DISCIPLINE_NAME': ['BIOQUÍMICA AMBIENTAL',
                                 'GEOPROCESSAMENTO APLICADO À GESTÃO '
                                 'AMBIENTAL'],
             'FULL_NAME': 'STUDENT_ONE',
             'STUDENT_ID': 1}},
 'TME': {3: {'COURSE_NAME': 'TEORIAS E METODOLOGIAS DA EDUCAÇÃO',
             'DISCIPLINE_NAME': ['TRABALHO DE CONCLUSÃO DO CURSO'],
             'FULL_NAME': 'STUDENT_THREE',
             'STUDENT_ID': 3}}}

Process finished with exit code 0

我创建了一个新的键,而不是只使用对象:{"COM": {3: data}}。如果要省略将数据映射到学生({"COM": data}),可以执行另一个转换:

def transform_again(data):
    transformed_data = dict()
    for obj in data:
        transformed_data.update(data[obj])
    return transformed_data

if __name__ == '__main__':
    solution = dict()
    for course, records in data.items():
        solution.update({course: transform_dict(records)})
    # pprint.pprint(solution)

    solution_2 = transform_again(solution['COM'])
    pprint.pprint(solution_2)

这将导致:

{'COURSE_NAME': 'COMERCIO',
 'DISCIPLINE_NAME': ['FUNDAMENTOS DO COMÉRCIO EXTERIOR',
                     'PROJETO INTEGRADOR II',
                     'LÍNGUA PORTUGUESA III',
                     'QUÍMICA II',
                     ' FÍSICA I',
                     'EDUCAÇÃO FÍSICA I',
                     'MATEMÁTICA III',
                     'SOCIOLOGIA III',
                     'FUNDAMENTOS DE CONTABILIDADE APLICADOS AO COMÉRCIO E '
                     'SERVIÇOS',
                     'BIOLOGIA III',
                     'FILOSOFIA III'],
 'FULL_NAME': 'STUDENT_TWO',
 'STUDENT_ID': 2}

现在,您可以开始重构所有内容,并使其更加高效。:)这是一个有趣的回答,我希望我的回答对你有帮助!祝你好运

相关问题 更多 >

    热门问题