簡體   English   中英

如何將多級字典列表寫到csv中

[英]How to write list of multilevel dictionaries into csv

我有一個存儲在推文中的字典列表,我正在嘗試使用writerows方法將它們寫到一個csv文件中。

樣本列表如下所示:

[{'sentiment': 'Unknown', 'date': datetime.datetime(2013, 1, 1, 5, 31, 32), 'body': 'mcd brk b'},
 {'sentiment': 'Unknown', 'date': datetime.datetime(2013, 1, 1, 6, 55, 23), 'body': 'co hihq'},
 {'sentiment': {'basic': 'Bullish'}, 'date': datetime.datetime(2013, 1, 1, 7, 36, 32), 'body': 'new year bac'}]

在這里, sentiment密鑰具有一個或兩個級別。 我正在嘗試將這些字典編寫為csv格式,這樣我只能獲得“未知”或“牛市”以上這些鍵的值。

file = open('BAC.csv','w')
keys=tweets[0].keys()
dict_writer=csv.DictWriter(file,keys)
dict_writer.writerows(tweets)

我得到以下格式的csv文件

Unknown,2013-01-01 05:31:32,mcd brk b
Unknown,2013-01-01 06:55:23,co hihq
{'basic': 'Bullish'},2013-01-01 07:36:32,mnew year bac

但我需要它

Unknown,2013-01-01 05:31:32,mcd brk b
Unknown,2013-01-01 06:55:23,co hihq
Bullish,2013-01-01 07:36:32,mnew year bac

有沒有簡單的方法可以做到這一點? 在許多情況下,級別最高可達五個,但類似的交易僅需要該值。

您將需要編寫一個函數來展平這些情緒值。

如果每個級別中只有一個元素,則類似的操作可能會起作用。

def flatten(row, field):
    if isinstance(row[field], dict):
        row[field] = row[field].values()[0]
        return flatten(row, field)
    return row

然后,您需要在每行上調用此方法,然后再將其寫入csv。

tweets = [{'sentiment': 'Unknown', 'date': datetime.datetime(2013, 1, 1, 5, 31, 32), 'body': 'mcd brk b'},
         {'sentiment': 'Unknown', 'date': datetime.datetime(2013, 1, 1, 6, 55, 23), 'body': 'co hihq'},
         {'sentiment': {'basic': {'text': 'Bullish' } }, 'date': datetime.datetime(2013, 1, 1, 7, 36, 32), 'body': 'new year bac'}]

print [flatten(row, 'sentiment') for row in tweets]

產量

[{'date': datetime.datetime(2013, 1, 1, 5, 31, 32), 'body': 'mcd brk b', 'sentiment': 'Unknown'},
 {'date': datetime.datetime(2013, 1, 1, 6, 55, 23), 'body': 'co hihq', 'sentiment': 'Unknown'},
 {'date': datetime.datetime(2013, 1, 1, 7, 36, 32), 'body': 'new year bac', 'sentiment': 'Bullish'}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM