我想创建一个词典列表并导出到csv文件。这些词典的长度各不相同 - 基本上我想做类似以下的事情:
a = {'name': 'Alison', 'food1': 'bananas', 'food2': 'apples', 'food3': 'dates'}
b = {'name': 'Ken', 'food1': 'noodles', 'food2': 'rice'}
c = {'name': 'Max', 'food1': 'jello', 'food2': 'yogurt', 'food3': 'bananas', 'food4': 'milk}
输出csv
name | food1 | food2 | food3 | food4
------------------------------------------------------------------------
Alison | bananas | apples | dates | ' '
Ken | noodles | rice | ' ' | ' '
Max | jello | yogurt | bananas | milk
# list of dictionaries
data = [a, b, c]
目前,我的代码允许从字典列表中创建数据结构,只要该列表中的每个字典具有相同数量的键。
keys = data[0].keys()
with open('profiles.csv', 'w', newline = '') as output_file:
dict_writer = csv.DictWriter(output_file, keys)
dict_writer.writeheader()
dict_writer.writerows(data)
有人有办法将长度不一的字典列表合并到csv中,如上所示吗?
答案 0 :(得分:2)
这是一个可能的熊猫解决方案。这也使用df.to_csv
方法写入文件更方便。如果您更喜欢' '
到NaN
,则可以添加df = df.fillna(' ')
。
import pandas as pd
a = {'name': 'Alison', 'food1': 'bananas', 'food2': 'apples', 'food3': 'dates'}
b = {'name': 'Ken', 'food1': 'noodles', 'food2': 'rice'}
c = {'name': 'Max', 'food1': 'jello', 'food2': 'yogurt', 'food3': 'bananas', 'food4': 'milk'}
dcts = [a,b,c]
df = pd.concat((pd.Series(dct) for dct in dcts), axis=1).T.set_index('name')
# food1 food2 food3 food4
# name
# Alison bananas apples dates NaN
# Ken noodles rice NaN NaN
# Max jello yogurt bananas milk
答案 1 :(得分:1)
@Yakym Pirozhenko为熊猫提供了一个很好的解决方案..
这是一个只有python和标准库csv
1。收集所有可能的密钥:
allkeys = set()
for d in data:
allkeys.extend(d.keys())
allkeys = list(allkeys) #freeze list order
2. 写入文件
with open(csvfile, 'wb') as f:
writer = csv.DictWriter(f, fieldnames=allkeys, restval='', extrasaction='ignore')
writer.writeheader()
for d in data:
writer.writerow(d)