Python以列格式对csv进行dict

时间:2018-04-17 16:14:52

标签: python csv

我有以下词典

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

我怎样才能做我需要的事?

4 个答案:

答案 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,