簡體   English   中英

使用DictWriter編寫字典鍵的子集

[英]Using DictWriter to write a subset of a dictionary's keys

我編寫了一個函數,使用csv模塊將字典列表序列化為CSV文件,代碼如下:

data = csv.DictWriter(out_f, fieldnames)
data.writerows(dictrows)

但是,我有時想要只寫出每個字典鍵的子集。 如果我將每個字典所包含的鍵的子集作為fieldnames傳遞, fieldnames收到錯誤:

"dict contains fields not in fieldnames"

我如何才能使DictRows只將我指定的字段的一部分寫入CSV,忽略字典中但不在字段名中的那些字段?

最簡單,最直接的方法是通過extrasaction='ignore' ,當你初始化DictWriter例如,作為記錄在這里

如果傳遞給writerow()方法的字典包含在字段名中找不到的鍵,則可選的extrasaction參數指示要采取的操作。 如果將其設置為'raise'則會引發ValueError 如果將其設置為'ignore' ,則忽略字典中的額外值。

它也適用於writerows ,它在內部只是反復調用writerow

您的代碼更改:

忘記Dictwriter,使用普通作家。

然后遍歷你的dicts列表:

for d in dictrows:
    ordinary_writer.writerow([d[fieldname] for fieldname in fieldnames])

使用d.get(fieldname, "")而不是d[fieldname]如果你不想例外,如果在沒有進入dfieldname

請注意匿名downvoters:這正在做Alex的解決方案在幕后做的事情(參見Lib / csv.py)並做得更好...... csv.py調用一個函數來獲取列表中的每一行,以及膽量那個功能是

return [rowdict.get(key, self.restval) for key in self.fieldnames]

暫無
暫無

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

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