我正在尝试转换像这样的字典:
{
'AAA': [ ('col1', 1), ('col2', 2), ('col3', 3) ],
'BBB': [ ('col2', 1), ('col3', 4) ],
'CCC': [ ('col4', 7) ]
}
...进入如下结构的csv:
key col1, col2, col3, col4
AAA 1 2 3
BBB 1 4
CCC 7
具体来说,我不知道列的名称是什么,或者需要创建哪些列,直到运行时,key
列除外,它直接对应于键。如果没有为给定列提供数据,则认为它是空的。
在Python中有一种简单的方法吗?我试图避免过度地将数据重新混合到不同的结构中,我看到的所有numpy示例都涉及并行列表。我愿意使用像numpy和pandas这样的库。
答案 0 :(得分:1)
在没有首先处理字典的情况下,没有一种简单的方法可以满足您的要求。
Python有一个csv库:https://docs.python.org/2/library/csv.html但您必须在使用之前以正确的格式保存数据。你最好的选择是DictWriter
类,它可以将dict作为每一行。你的元组可以很容易地转换为dicts,所以你需要能够使用这个类来获得字段名列表(列名)。
以下是我将您的信息打印到csv中的方式:
from csv import DictWriter
d = { 'AAA': [ ('c1', 1), ('c2', 2), ('c3', 3)],
'BBB': [ ('c2', 1), ('c3', 4)],
'CCC': [ ('c4', 7)]
}
# convert dictionary of tuples into list of dictionaries
# and gather fieldnames at the same time
rows = []
fieldnames = set()
for k in d.keys():
# a list of (k, v) tuples can be converted to a dict
# but watch out for duplicate keys!
tmp = dict(d[k])
fieldnames.update(tmp.keys())
tmp['key'] = k
rows.append(tmp)
# add key to the front of the list, since sets are unordered
# you could sort the fieldnames however you want here
fieldnames = ['key'] + list(fieldnames)
# open the file and write the csv
with open('out.csv', 'w') as csvfile:
writer = DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for row in rows:
writer.writerow(row)