繁体   English   中英

从字典中写入一个 CSV 并将值作为标题键对齐

[英]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)

可能关键的技巧是zipzip_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM