Способ, которым вы сгруппировали lst, избыточен;все ключи уникальны, это может быть также один словарь, например
data = {
('unit1', 'test1'): 11,
('unit1', 'test2'): 12,
('unit2', 'test1'): 13,
('unit2', 'test2'): 14
}
, затем
import csv
def getUniqueValues(seq):
"Return sorted list of unique values in sequence"
values = list(set(seq))
values.sort()
return values
def dataArray(data2d, rowIterField=0, rowLabel='', defaultVal=''):
# get all unique unit and test labels
rowLabels = getUniqueValues(key[rowIterField] for key in data2d)
colLabels = getUniqueValues(key[1-rowIterField] for key in data2d)
# create key-tuple maker
if rowIterField==0:
key = lambda row,col: (row, col)
else:
key = lambda row,col: (col, row)
# header row
yield [rowLabel] + colLabels
for row in rowLabels:
# data rows
yield [row] + [data2d.get(key(row,col), defaultVal) for col in colLabels]
def main():
with open('output.csv', 'wb') as outf:
outcsv = csv.writer(outf)
outcsv.writerows(dataArray(data, 0, 'unitnames'))
if __name__=="__main__":
main()
, и результат можно легко перевернуть (единицы измерения, тесты вниз), изменивdataArray(data, 0, 'unitnames')
до dataArray(data, 1, 'testnames')
.