问题描述
我目前有一个包含6个词典的列表,但计划在此列表中扩展到1000个词典。 每个字典具有相同的9个键,我希望它们可以作为我的列标题。 对于某些键,该值是字符串,例如城市名称,而对于其他键,该值是列表,对于每个字典(例如兴趣爱好),长度可能有所不同。
一个简短的示例,每个词典只有3个键(名称,城市,兴趣爱好):
list_of_dictionaries = [{'name' : 'John', 'city' : 'Las Vegas', 'hobbies' : ['running', 'gambling', 'weight-lifting']}, {'name' : 'Jane', 'city' : 'Chicago', 'hobbies' : ['video games', 'yoga']}, {'name' : 'Jack', 'city' : 'New York', 'hobbies' : ['sports', 'drinking', 'travel', 'fashion']}]
我想将此字典列表打印为CSV,将键值对的每个排列都放在单独的行中,例如以下格式:
名字城市爱好
约翰·拉斯维加斯跑步
约翰·拉斯维加斯赌博
约翰·拉斯维加斯举重
简·芝加哥视频游戏
简·芝加哥瑜伽
杰克·纽约体育
杰克·纽约喝酒
杰克纽约旅行
杰克·纽约时装
我对Python /编程比较陌生,意识到我可能采用的效率很低。 我已经尝试过csv模块,DictWriter等,但是什么也没有产生预期的结果。 我乐于接受任何事物,无论是仅仅是一个模块,还是重做列表/词典。 任何输入,不胜感激。
非常感谢你!
编辑:六个字典来自我正在遍历的六个文件。 因此,对于每个文件,我有9个字符串/列表,我将它们组合在一起作为一个字典,然后将这6个字典附加到一个列表中。
詹姆士
1楼
检查是否有帮助...编写自己的csv编写器...
for element in list_of_dictionaries:
for i in range(len(element['hobbies'])):
print("{0} {1} {2}".format(element['name'],element['city'],element['hobbies'][i]))
2楼
使用csv:
import csv
list_of_dictionaries = [
{'name' : 'John', 'city' : 'Las Vegas', 'hobbies' : ['running', 'gambling', 'weight-lifting']},
{'name' : 'Jane', 'city' : 'Chicago', 'hobbies' : ['video games', 'yoga']},
{'name' : 'Jack', 'city' : 'New York', 'hobbies' : ['sports', 'drinking', 'travel', 'fashion']}
]
with open('out.csv', 'wb') as csvfile:
csv = csv.writer(
csvfile,
delimiter=',',
quotechar='"',
quoting=csv.QUOTE_MINIMAL
)
csv.writerow(['Name','City','Field1','Field2','...'])
for item in list_of_dictionaries:
# Include any multi-value fields as:
# for field1, field2, ... in zip(item['field1', 'field2', ...]):
# csv.writerow([item['name'], item['city'], field1, field2, ...])
for hobby in item['hobbies']:
csv.writerow([item['name'], item['city'], hobby])
编辑:允许任意数量的多值字段。