Один из способов обойти это без использования Pandas [РЕДАКТИРОВАТЬ: я вижу, что вы с тех пор редактировали, чтобы упомянуть об этом], это сделать функцию, которая просматривает один из ваших словарей и составляет соответствующую строку текста CSV.
def generate_row(separator, headers, data_type, data_list, list_name):
data_by_genre = {k: '' for k in headers}
for data in data_list:
data_by_genre[data['genre']] = str(data[data_type])
output_text = separator.join([data_by_genre[genre] for genre in headers]) + '\n'
# If it's 'amount', then the row starts with the name. Otherwise that space is blank.
if data_type == 'amount':
output_text = list_name + output_text
return output_text
list_one = [{'genre': 'Action', 'amount': 141, 'meanScore': 82}, {'genre': 'Comedy', 'amount': 191, 'meanScore': 82}]
list_two = [{'genre': 'Horror', 'amount': 11, 'meanScore': 62}, {'genre': 'Comedy', 'amount': 191, 'meanScore': 82}]
headers = ['', 'Action', 'Comedy', 'Horror']
separator = ','
f = open('new.csv', 'w')
f.write(separator.join(headers))
f.write('\n')
f.write(generate_row(separator, headers, 'amount', list_one, 'list_one'))
f.write(generate_row(separator, headers, 'meanScore', list_one, 'list_one'))
f.write(generate_row(separator, headers, 'amount', list_two, 'list_two'))
f.write(generate_row(separator, headers, 'meanScore', list_two, 'list_two'))
f.close()
Я сделал «разделитель» переменной, если вы хотите использовать, например, разделенные табуляцией вместо запятых.
Если вы хотите использовать Pandas, вы можете написать что-нибудь, чтобы переформатировать ваши данныевыглядеть так, поэтому пишет "правильно".
data1 = [{'Action': 141, 'Comedy': 191, 'Horror': None},
{'Action': 82, 'Comedy': 82, 'Horror': None},
{'Action': None, 'Comedy': 191, 'Horror': 11},
{'Action': None, 'Comedy': 82, 'Horror': 62}]
DataFrame(data1).to_csv('test.csv')