使用 DictWriter 编写字典键的子集

     2023-02-24     100

关键词:

【中文标题】使用 DictWriter 编写字典键的子集【英文标题】:Using DictWriter to write a subset of a dictionary's keys 【发布时间】:2011-03-13 15:21:05 【问题描述】:

我使用csv 模块编写了一个将字典列表序列化为 CSV 文件的函数,代码如下:

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

但是,有时我只想将每个字典键的子集写入文件。如果我以fieldnames 的形式传递每个字典所具有的键的子集,则会收到错误消息:

"dict contains fields not in fieldnames"

如何使 DictRows 仅将我指定的字段的子集写入 CSV,而忽略字典中但不在字段名中的那些字段?

【问题讨论】:

【参考方案1】:

最简单和最直接的方法是在初始化DictWriter 实例时传递extrasaction='ignore',如here 所述:

如果字典传递给 writerow() 方法包含一个键不 在字段名中找到,可选 extrasaction 参数表示什么 采取的行动。如果设置为 'raise' ValueError 被提出。如果它 设置为'ignore',额外的值在 字典被忽略了。

它也适用于writerows,它在内部只是重复调用writerow

【讨论】:

未找到字典键的选项 restval 与 extrasaction='ignore' 一起特别有用。 提醒一下,关键子集看起来像['lat', 'lng']【参考方案2】:

对代码的更改:

忘掉Dictwriter,用普通的writer。

然后遍历你的字典列表:

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

如果d 中没有fieldname 的条目,如果您不希望出现异常,请使用d.get(fieldname, "") 而不是d[fieldname]

匿名投票者请注意:这是 Alex 的解决方案在幕后所做的(参见 Lib/csv.py)并且做得更好...... csv.py 调用一个函数来获取列表中的每一行,这个函数的核心是

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

【讨论】:

-1;当DictWriter 提供了一个方便的参数来自动解决问题时,没有理由这样做,如 Alex 的回答中所述。

当行内容是相关键的键值(每列的标题)时,如何用python在csv中编写嵌套字典?

...容是相关键的键值(每列的标题)时,如何用python在csv中编写嵌套字典?【英文标题】:Howtowritenesteddictionaryincsvwithpythonwhentherowcontentsarekeyvaluesofrelatedkey(theheaderofeachcolumn)?【发布时间】:2021-09-2216:57:05【问题描述】:我有一本名... 查看详情

使用值范围作为键的字典对象

】使用值范围作为键的字典对象【英文标题】:Adictionaryobjectthatusesrangesofvaluesforkeys【发布时间】:2011-01-0923:44:43【问题描述】:我需要一种专门的字典。我的用例是这样的:用户想要指定值的范围(范围也可以是一个点)并将... 查看详情

使用字典理解时如何避免丢失键的错误

】使用字典理解时如何避免丢失键的错误【英文标题】:Howtoavoiderroronmissingkeyswhenusingdictcomprehension【发布时间】:2018-08-1103:28:33【问题描述】:如何在pd.DataFrame.from_dict理解迭代中忽略丢失的键?@jezrael在这里回答了我关于使用字... 查看详情

如何检查一个字典是不是是另一个更大字典的子集?

...【发布时间】:2012-03-0814:05:28【问题描述】:我正在尝试编写一个自定义过滤器方法,该方法采用任意数量的kwargs并返回一个列表,其中包含包含这些kwargs的类似数据库的列表的元素>.例如 查看详情

无法使用 Json.net 序列化具有复杂键的字典

】无法使用Json.net序列化具有复杂键的字典【英文标题】:NotableToSerializeDictionarywithComplexkeyusingJson.net【发布时间】:2014-08-2115:47:37【问题描述】:我有一个自定义.net类型作为其键的字典。我正在尝试使用JSON.net将此字典序列化为... 查看详情

如何仅针对键的子集有效地比较 C++ 中的两个字符串映射

...题描述】:我想知道是否只有通过应用一些标准算法才能编写一个短函数来比较两个std::map<string,string>并在所有键值对(但有些)为真时返回真 查看详情

使用 NSPredicate 仅从字典数组中获取特定键的值

】使用NSPredicate仅从字典数组中获取特定键的值【英文标题】:UsingNSPredicategetonlyvaluesofaparticularkeyfromanarrayofdictionaries【发布时间】:2014-04-1109:55:18【问题描述】:我不知道这些值。我只知道钥匙。arrTripCat:(tripcategory="general_tourism"... 查看详情

在 Python 中使用 None 值删除字典中键的正确方法

】在Python中使用None值删除字典中键的正确方法【英文标题】:ProperwaytoremovekeysindictionarywithNonevaluesinPython【发布时间】:2016-02-2104:42:30【问题描述】:在Python中从值==None的字典中删除键的正确方法是什么?【问题讨论】:您必须... 查看详情

如何将地图与具有正则表达式键的字典一起使用?

】如何将地图与具有正则表达式键的字典一起使用?【英文标题】:Howtousemapwithadictionaryhavingregularexpressionkeys?【发布时间】:2020-02-0901:35:37【问题描述】:我有一个带有我想要映射的变量的DataFrame,使用的字典不是“普通”字符... 查看详情

如何用 csv.DictWriter 写标题行?

】如何用csv.DictWriter写标题行?【英文标题】:Howtowriteheaderrowwithcsv.DictWriter?【发布时间】:2011-02-2805:58:45【问题描述】:假设我有一个csv.DictReader对象,我想将它写成CSV文件。我该怎么做?我知道我可以像这样编写数据行:dr=csv... 查看详情

如何在删除每个字典的子集时合并字典对

...时间】:2017-06-2320:16:44【问题描述】:问题陈述:我正在使用python3.5并且喜欢新的字典合并语法:merged=**A,**B但是,如果您只想要A和B中的某个键子集怎么办?A_keys=[somesmallsubsetofthe 查看详情

尝试对其键的子集进行镜头/遍历映射多重更新

...【发布时间】:2021-04-1908:09:27【问题描述】:我正在尝试使用遍历来更新整个IntMap的多个键。消除XY:我不是简单地尝试更新它们,我需要遍历返回给调用者以进一步组合。或者至少是可以与镜头组合的东西。我尝试了许多常用... 查看详情

Python - 使用 numpy 数组作为字典中的键的替代方法

】Python-使用numpy数组作为字典中的键的替代方法【英文标题】:Python-Alternativeforusingnumpyarrayaskeyindictionary【发布时间】:2017-02-0203:30:09【问题描述】:我对Pythonnumpy还是很陌生。我试图在我的一个函数中使用numpy数组作为字典中的... 查看详情

使用带有 lambda 参数的 reduce 函数获取具有相同键的新字典

】使用带有lambda参数的reduce函数获取具有相同键的新字典【英文标题】:Getanewdictionarywiththesamekeysusingreducefunctionwithalambdaargument【发布时间】:2021-12-2710:42:55【问题描述】:我有一个这样的字典列表。fruit=["apple":10,"pear":20,"banana":3... 查看详情

在列表中查找具有值的最小字典键的 Pythonic 方法?

...发布时间】:2021-10-1721:17:49【问题描述】:我正在用Python编写Astar算法的实现,有时我想选择open_set中具有最低f_scorevalue的元素:#currentisthenodeinopen_sethavingthelowe 查看详情

如何使用 Json.Net 序列化/反序列化带有自定义键的字典?

】如何使用Json.Net序列化/反序列化带有自定义键的字典?【英文标题】:HowcanIserialize/deserializeadictionarywithcustomkeysusingJson.Net?【发布时间】:2014-09-0103:26:00【问题描述】:我有以下类,用作字典中的键:publicclassMyClassprivatereadonlyst... 查看详情

将熊猫数据框转换为具有多个键的字典

...有四个键的字典,这些键都来自列。我还有多个列,我想使用从这四列构建的键返回值。我使用循环的方式工作,但最终出现内存错误。我很好奇有没有更有效的方法呢?数据框如下所示:ServiceBillWeight 查看详情

将变量分配给具有相同键的字典项

...名称分配给字典中不同项目的方法。问题是,所有项目都使用相同的密钥。我正在使用PYMSSQL查询数据库服务器以获取数据库名称列表。conn=pymssql.connect(DBServer,DBUser,DBPass, 查看详情