CSV в JSON с массивом объектов в Python - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть данные, показанные в виде csv, как показано ниже:

idd,name,age
1, rahul, 28
1, rahul, 33
3, virat, 30

Если id и имя двух или более записей совпадают, то значение age должно быть сохранено как один массив объектов.

Я написал ниже код в Python3, я читаю мой CSV-файл, который является test1.csv, а затем использую groupby для создания json массива

import csv
import json
from itertools import groupby

with open('C:/AmanData/PythonWorkShop/test1.csv','r') as csv_ledger:
    r = csv.DictReader(csv_ledger)
    data = [dict(d) for d in r]
    groups = []

    for k, g in groupby(data, lambda r: (r['idd'], r['name'])):

        groups.append({
            "name": k[1],
            "idd": k[0],
            "age": [{k: v for k, v in d.items() if k not in ['idd', 'name']} for d in list(g)]
        })


print(json.dumps(groups[:10], indent=4))

Вывод Я получаю: -

[
    {
        "name": "[ rahul]",
        "idd": "1",
        "age": [
            {
                "age": " 28"
            },
            {
                "age": " 33"
            }
        ]
    },
    {
        "name": "[ virat]",
        "idd": "3",
        "age": [
            {
                "age": " 30"
            }
        ]
    }
]

Ожидаемый результат: -

[
    {
        "name": "[ rahul]",
        "idd": "1",
        "age": [ "28","33"]
    },
    {
        "name": "[ virat]",
        "idd": "3",
        "age": ["30"]
    }
]

Любая помощь будет высоко оценена.

...