将 Python 中的词典列表打印到唯一行中的 .csv
Printing list of dictionaries in Python to .csv in unique rows
我目前有一个包含 6 个词典的列表,但计划在这个列表中扩展到 ~1000 个词典。每本词典都有相同的9键,希望能成为我的专栏headers。对于某些键,值是一个字符串,例如城市名称,而对于其他键,值是一个列表,每个字典的长度可能不同(例如兴趣爱好)。
一个简短的例子,每个字典只有 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,key-value 对的每个排列在单独的行中,如以下格式:
Name City Hobbies
John Las Vegas Running
John Las Vegas Gambling
John Las Vegas Weight-Lifting
Jane Chicago Video Games
Jane Chicago Yoga
Jack New York Sports
Jack New York Drinking
Jack New York Travel
Jack New York Fashion
我对 Python/programming 比较陌生,意识到我可能采用了一种非常低效的方法。我已经尝试了 csv 模块、DictWriter 等,但没有产生预期的结果。我对任何事情都持开放态度,无论它只是一个模块,还是修改 list/dictionaries。非常感谢任何输入。
非常感谢!
编辑:这六个词典来自我正在迭代的六个文件。所以对于每个文件,我有九个 strings/lists,我将它们组合在一起作为一个字典,然后将这六个字典附加到一个列表中。
詹姆斯
检查这是否有帮助...编写您自己的 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]))
使用 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])
编辑:
允许任意数量的多值字段。
我目前有一个包含 6 个词典的列表,但计划在这个列表中扩展到 ~1000 个词典。每本词典都有相同的9键,希望能成为我的专栏headers。对于某些键,值是一个字符串,例如城市名称,而对于其他键,值是一个列表,每个字典的长度可能不同(例如兴趣爱好)。
一个简短的例子,每个字典只有 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,key-value 对的每个排列在单独的行中,如以下格式:
Name City Hobbies
John Las Vegas Running
John Las Vegas Gambling
John Las Vegas Weight-Lifting
Jane Chicago Video Games
Jane Chicago Yoga
Jack New York Sports
Jack New York Drinking
Jack New York Travel
Jack New York Fashion
我对 Python/programming 比较陌生,意识到我可能采用了一种非常低效的方法。我已经尝试了 csv 模块、DictWriter 等,但没有产生预期的结果。我对任何事情都持开放态度,无论它只是一个模块,还是修改 list/dictionaries。非常感谢任何输入。
非常感谢!
编辑:这六个词典来自我正在迭代的六个文件。所以对于每个文件,我有九个 strings/lists,我将它们组合在一起作为一个字典,然后将这六个字典附加到一个列表中。
詹姆斯
检查这是否有帮助...编写您自己的 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]))
使用 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])
编辑: 允许任意数量的多值字段。