将带有列表的词典导出为CSV

时间:2016-05-14 16:53:46

标签: python python-2.7 csv dictionary web-scraping

编辑:在我试图缩小我的问题的范围内,我可能会过度简化以使其更难回答。让我再尝试一次。假设字典是:

holder = {'key1':['headline1', 'body1'], 'key2':['headline2', 'body2']}

我希望将该字典输出到csv文件,该文件将在三列中表示该信息:键列,标题列和正文列。由于下面提到的原因,尝试使用下面提到的答案做错了。

希望这一点更清楚。

我正在抓取一些中国新闻网站并尝试将结果输出到csv文件中。在抓取之后,字典的结构是:

uniqueID : [headlines, body]

每个故事。我试图输出最终读取的CSV:

uniqueID1 / headlines1 / body1
uniqueID2 / headlines2 / body2
uniqueID3 / headlines3 / body3

每个列在不同的列中(所以基本上是三列,行数和故事一样多)。

我尝试使用this question的解决方案,但除了翻转X和Y轴(我知道如何修复)之外,它还将每个标题/故事中的每个字符分成不同的条目,打破了字符编码。由于我不知道如何解决这些问题,我有点卡住了。

如果它有用或相关,我会用这种方式编码字符:

head_fixed = str(headline)
    soup = BeautifulSoup(head_fixed, 'lxml')
    good_output = soup.text.decode("unicode-escape").encode("utf-8")

当然,我也对我构建数据的方式错误的建议持开放态度。

感谢您的任何想法。

2 个答案:

答案 0 :(得分:0)

使用pandas(您可能需要pip install pandas

,这非常简单
import pandas as pd

holder = {'key1':['headline1', 'body1'], 'key2':['headline2', 'body2']}

df = pd.DataFrame(holder)

df.transpose().to_csv('output.csv', header=None)

# output.csv:
# key1  headline1  body1
# key2  headline2  body2

答案 1 :(得分:0)

我最终通过将数据重组为列表来解决此问题,因此:

holder = [[key1, headline1, body1], [key2, headline2, body2]]

然后我刚用

with open('output.csv', 'wb') as f:
    writer = csv.writer(f)
    writer.writerows(holder)

我不确定在这种情况下使用词典,列表或两者的组合是否有优势。在这种情况下,切换到列表似乎有效,尽管我对Daniel建议的解决方案有点好奇。