Кроме того, только для развлечения, но с акцентом на понятности:
all_examples = ['A,1,1', 'B,2,1', 'C,4,4', 'D,4,5']
ll = [ x.split(",") for x in all_examples ]
ld = list()
for col in range(1, len(ll[0])):
ld.append({ l[0] : int(l[col]) for l in ll })
print ld
напечатает
[{'A': 1, 'C': 4, 'B': 2, 'D': 4}, {'A': 1, 'C': 4, 'B': 1, 'D': 5}]
работает до тех пор, как вход в формате CSV с целыми числами и линии одинаковой длины.
Диссекция: Я буду использовать тему «предмет» для A, B и C и «измерение» для «столбцов» в данных, т.е.те значения в том же «csv-столбце» данных inut.
Получить входные строки данных в список для каждой строки: A,1,1
->["A","1","1"]
ll = [ x.split(",") for x in all_examples ]
Результат должен быть список dicts, так что давайте инициализировать один:
ld = list()
Для каждого измерения (при условии, что все линии имеют одинаковое количество столбцов):
for col in range(1, len(ll[0])):
Возьмите вещь l[0]
, например. «A», из строки и присвоить числовое значение int()
, например. 1, измерения в соответствующем столбце l[col]
, т.е. «1», к чему-то. Затем используйте dictionary comprehension, чтобы объединить его в следующую строку желаемого результата. Наконец append()
dict
в список результатов ld
.
ld.append({ l[0] : int(l[col]) for l in ll })
View unfoamted. Используйте print json.dumps(ld, indent=4)
для более удобного отображения:
print ld
Надеется, что это помогает. Узнайте больше о пониманиях dict, например. here (версия этой великолепной книги Python3).
Неверный желаемый выходной словарь. Пожалуйста, отредактируйте свой пост. –
Почему бы не указать один ключевой пункт в список, содержащий отображаемые значения? –
У вас может быть список, содержащий словари. Но у вас не может быть словаря, который просто содержит списки. Вам нужны ключи: пары значений в словаре. Также ваш ввод - это строго список строк. Поэтому посмотрите, используя 'split', чтобы сначала включить это в список списков. – roadrunner66