Ключевым моментом здесь является преобразование
data = {
'col1': [1, 2, 3],
'col2': [4, 5, 6],
'col3' : [7, 8, 9]
}
в список строк:
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
Мы знаем, что это выражение будет получить список столбцов:
header = ['col1', 'col2', 'col3']
[data[h] for h in header] # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Если мы их застегнем вместе мы получим то, что хотим:
zip(*(data[h] for h in header)) # [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
С этим мы можем записать данные в файл CSV. Собираем все вместе:
import csv
data = {
'col1': [1, 2, 3],
'col2': [4, 5, 6],
'col3' : [7, 8, 9]
}
header = ['col1', 'col2', 'col3']
with open('dict_to_csv_in_order.csv', 'wb') as f:
writer = csv.writer(f)
writer.writerow(header)
writer.writerows(zip(*(data[h] for h in header)))
Используйте 'ordereddict', а ключи' dict's по своей природе не упорядочены в том же порядке, что ключи построены, или сортировать ключи и итерацию по клавишам, чтобы получить содержимое в требуемом порядке – EdChum