簡體   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