Предположим, у меня есть следующий список словарей:
citation = [{'ID':'101',
'SENTENCE':'This is a theory sample from a book.'
'AUTHOR':'ALEX B.',
'AUTHOR1':'JOHN K.',
'TITLE':'BASIC PROGRAMMING',
'URL':'an.example.com',
'YEAR':'2010'},
{'ID':'102',
'SENTENCE':'This is a theory from book 1 and book 2',
'AUTHOR':'MARINA E.',
'TITLE':'BE A GOOD PROGRAMMER',
'YEAR':'2011',
'AUTHOR1':'STEVE M.',
'AUTHOR2':'DIANE L.',
'TITLE1':'I AM AN ENGINEER',
'YEAR1':'2013',
'VOLUME':'10'},
{.. other data...},
]
Мне нужно сохранить этот список словарей в файл csv
.Если ключ в словаре похож (AUTHOR = AUTHOR1 = AUTHOR2, TITLE = TITLE1 = TITLE2
и т. Д.), Поместите его в тот же столбец без номера в имени столбца (AUTHOR, TITLE, YEAR
).Если значение данных в столбце больше одного, они должны быть разделены точкой с запятой (;
).Кроме того, имена ключей и их порядок в каждом словаре иногда отличаются от других словарей в списке.
Это мой код, но он не работает, потому что похожие ключи в словаре хранятся как разныеимена полей:
outpath = 'mycitation.csv'
outfile = open(outpath, 'w')
fields = (list(set(k for d in citation for k in d)))
writer = csv.DictWriter(outfile, fieldnames=field, dialect='excel')
writer.writeheader()
for row in citation:
writer.writerow(row)
outfile.close()
Вывод, который мне нужно получить в файле csv
:
ID | SENTENCE | AUTHOR | TITLE | YEAR | URL | VOLUME
--------------------------------------------------------------------------------------------------------------------------------------------------------------
101 | This is a theory sample from a book. | ALEX B.;JOHN K. | BASIC PROGRAMMING | 2010 | an.example.com |
102 | This is a theory from book 1 and book 2 | MARINA E.;STEVE M.;DIANE L. | BE A GOOD PROGRAMMER; I AM AN ENGINEER | 2011; 2013 | | 10