在同一列中使用公共键值将公共字典列表写入CSV

2024-04-25 14:14:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我构造了一个字典列表,以便每个字典都表示特定事件的数据。数据是:

events = [{'date': '7:30 PM ET, October 29, 2014',
      'guests': ['Cleopatra', 'Ghandi'], 
      'location': 'Cairo, Egypt',
      'random_nums': [1, 2, 3, 4]},
     {'date': '8:00 PM ET, November 1, 2014', 
      'guests': ['JFK', 'Abe Lincoln'], 
      'location': 'Dallas, TX', 
      'random_nums': [5, 6, 7, 8]},
     {'date': '8:30 PM ET, November 3, 2014', 
      'guests': ['Joan of Arc', 'Genghis Khan'], 
      'location': 'the Moon',
      'random_nums': [9, 10, 11, 12]}]

我正在尝试写入一个CSV,这样每个偶数都被表示为自己的行,公共键作为标题。你知道吗

date                    random_nums    guests                    location
7:30 PM ET, October 29  1, 2, 3, 4     Cleopatra, Ghandi         Cairo, Egypt
8:00 PM ET, November 1  5, 6, 7, 8     JFK, Abe Lincoln          Dallas, TX
8:30 PM ET, November 3  9, 10, 11, 12  Joan of Arc, Genghis Khan the Moon

我看过很多关于这个话题的类似帖子,但没有一篇能解决这个问题。我意识到有一些分隔符问题,因为字符串中有逗号。你知道吗

所以,我需要帮助:

  1. 使每个事件成为一行(列表应包含在单个元素中)
  2. 在不更改字符串中的逗号或其他解决方法的情况下解决分隔符问题

就我所知:

with open("output.csv", "wb") as f:
    writer = csv.writer(f, delimiter = ';')
    writer.writerow(list(events[1].keys()))
    for event in events:
        print event.values()
        for row in event.values():
            writer.writerow(row)

Tags: 数据event列表date字典事件locationrandom
1条回答
网友
1楼 · 发布于 2024-04-25 14:14:38

因为您有一堆字典,所以使用csv.DictWriter可能会简单一些,它会自动对齐键。像这样的

with open("output.csv", "wb") as f:
    writer = csv.DictWriter(f, fieldnames=list(events[0]), delimiter = ';')
    writer.writeheader()
    for event in events:
        outevent = event.copy()
        outevent["random_nums"] = ", ".join(map(str, outevent["random_nums"]))
        outevent["guests"] = ", ".join(outevent["guests"])
        writer.writerow(outevent)

将产生

date;random_nums;guests;location
7:30 PM ET, October 29, 2014;1, 2, 3, 4;Cleopatra, Ghandi;Cairo, Egypt
8:00 PM ET, November 1, 2014;5, 6, 7, 8;JFK, Abe Lincoln;Dallas, TX
8:30 PM ET, November 3, 2014;9, 10, 11, 12;Joan of Arc, Genghis Khan;the Moon

请注意,如果元素中存在分隔符,则也可以使用制表符甚至逗号作为分隔符,并适当地引用它。你知道吗

相关问题 更多 >