我有以下词典
items = {'people': ['Peter', 'Danny'], 'numbers': [1,2,3,4], 'cities': ['London']}
我想按列将该dict写入CSV文件,即使用以下格式:
people,numbers,cities
Peter,1,London
Danny,2,
,3,
,4,
我当前的方法无法正常工作,因为我按行获取了CSV文件:
people,Peter,Danny
numbers,1,2,3,4
cities,London
我怎样才能做我需要的事?
答案 0 :(得分:4)
或者您可以使用Pandas,只需要两行
import pandas as pd
pd.DataFrame(items).fillna('').to_csv('file_path')
答案 1 :(得分:3)
您可以使用itertools.zip_longest
(Python2中的itertools.izip_longest
):
from itertools import zip_longest
import csv
items = {'people': ['Peter', 'Danny'], 'numbers': [1,2,3,4], 'cities': ['London']}
headers = ['people', 'numbers', 'cities']
with open('filename.csv', 'w') as f:
full_listing = [['' if not b else b for b in i] for i in zip_longest(*[items[c] for c in headers])]
write = csv.writer(f)
write.writerows([headers]+full_listing)
输出:
people,numbers,cities
Peter,1,London
Danny,2,
,3,
,4,
答案 2 :(得分:0)
一种简单的方法是计算字典中最长列表的长度,然后将''
附加到所有列表中,以便它们具有此长度。
num_rows = max((len(x) for x in items.values()))
items = {k: items[k] + [''] * (num_rows - len(items[k])) for k in items}
print(items)
#{'cities': ['London', '', '', ''],
# 'numbers': [1, 2, 3, 4],
# 'people': ['Peter', 'Danny', '', '']}
然后使用dict
模块将csv
写入csv。
或者您可以从字典中构建pandas DataFrame
:
import pandas as pd
df = pd.DataFrame(items)
print(df)
# cities numbers people
#0 London 1 Peter
#1 2 Danny
#2 3
#3 4
现在您可以使用to_csv()
方法将其写入文件。
答案 3 :(得分:0)
这是一个完成工作的独立的一行功能;)
items = {'people': ['Peter', 'Danny'], 'numbers': [1, 2, 3, 4], 'cities': ['London']}
def to_csv(items):return '\n'.join([','.join(list(items.keys()))]+[','.join(['' if i >= len(items[key]) else str(items[key][i]) for key in items.keys()]) for i in range(max([len(items[key]) for key in items.keys()]))])
print(to_csv(items))
输出:
people,numbers,cities
Peter,1,London
Danny,2,
,3,
,4,