![](/img/trans.png)
[英]How to write list values from a dictionary under the key header in a CSV as columns
[英]Write a CSV from Dictionary with Values as Header Keys Aligned Under
尝试从字典中编写 csv,其中 csv 标头是字典值,键在匹配值下对齐。
alternate_names = { 'advertisement' : 'advertising',
'ads' : 'advertising',
"adverts" : "advertising",
'distributor' : 'distribution'}
然后会变成像 csv 一样:
广告、分销
广告,经销商
广告
广告
如果键是标题而不是值,则似乎很简单。
像这样的东西?
import csv
import collections
import itertools
alternate_names = { 'advertisement' : 'advertising',
'ads' : 'advertising',
"adverts" : "advertising",
'distributor' : 'distribution'}
groups = collections.defaultdict(list)
for word, group in alternate_names.items():
groups[group].append(word)
with open('results.csv', 'w') as fh:
writer = csv.writer(fh)
writer.writerow(groups.keys())
for row in itertools.zip_longest(*groups.values()):
writer.writerow(row)
可能关键的技巧是zip
或zip_longest
可用于以“列表列表”形式转置矩阵。
一个变种...
import csv
from operator import itemgetter
from itertools import groupby
alternate_names = { 'advertisement' : 'advertising',
'ads' : 'advertising',
"adverts" : "advertising",
'distributor' : 'distribution'}
ig1 = itemgetter(1)
groups = {k:[x[0] for x in v] for k,v in
groupby(sorted(alternate_names.items(), key=ig1), ig1)}
data = groups.values()
with open('output.csv', 'w') as f:
writer = csv.writer(f)
writer.writerow(groups.keys())
for i in range(max(len(v) for v in data)):
writer.writerow(col[i] if i < len(col) else '' for col in data)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.