Создать вложенный словарь со списками из файла CSV - PullRequest
0 голосов
/ 18 марта 2020

У меня есть файл CSV ("import.csv"), в котором содержатся следующие данные, где каждое значение является строкой

KID, C1, C2, C3
ID1, X1, "X2, X2.5", X3
ID2, "Y1, Y1.5", Y2, Y3

Я хочу создать вложенный словарь, используя данные, подобные

'KID' {
    'ID1' {
        'C1': 'X1',
        'C2': ['X2', 'X2.5'],
        'C3': 'X3',
    },
    'ID2' {
        'C1': ['Y1', 'Y1.5'],
        'C2': 'Y2',
        'C3': 'Y3',
    },

У меня есть следующий код

import csv
dict = {}

with open("import.csv", mode='r') as data_file:
data = csv.DictReader(data_file)
for row in data:
    item = artists.get(row["artist"], dict())

    item["C1"] = str(row["C1"])
    item["C2"] = str(row["C2"])
    item["C3"] = str(row["C3"])


    dict[row["KID"]] = item

Вместо этого я получаю словарь

'KID' {
    'ID1' {
        'C1': 'X1',
        'C2': 'X2, X2.5',
        'C3': 'X3',
    },
    'ID2' {
        'C1': 'Y1, Y1.5',
        'C2': 'Y2',
        'C3': 'Y3',
    },

Я перебираю словарь, находя ключи в словаре с помощью значение, поэтому проблема со строкой / списком меня запутывает. Есть ли способ изменить создание моего словаря или мне нужно изменить способ настройки CSV?

1 Ответ

0 голосов
/ 18 марта 2020

Используйте функцию-оболочку для просмотра списка возврата, если присутствует несколько значений, и строки, в противном случае

def get_str_or_list(value):
    return value.split(",") if "," in value else value


item["C1"] = get_str_or_list(str(row["C1"]))
item["C2"] = get_str_or_list(str(row["C2"]))
item["C3"] = get_str_or_list(str(row["C3"]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...