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

Write a list of common dictionaries to CSV with common key values in the same column

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

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,以便每个偶数都表示为自己的行,公共键为 headers。

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

我看过很多关于这个主题的类似帖子,但 none 解决了这个特定问题。我意识到存在一些分隔符问题,因为字符串中有逗号。

所以,我需要帮助:

  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)

既然你有一堆字典,使用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

请注意,尽管您也可以使用制表符甚至逗号作为分隔符——如果元素中存在分隔符,它将被适当地引用。