使用字典理解过滤 defaultdict

Posted

技术标签:

【中文标题】使用字典理解过滤 defaultdict【英文标题】:Filtering defaultdict with dictionary comprehension 【发布时间】:2018-07-28 00:27:06 【问题描述】:

我有一个默认字典,其中键是数字,值是列表,每个列表有两个条目。我想根据第一个条目按条件过滤。我在这里尝试使用建议:filter items in a python dictionary where keys contain a specific string

这是我使用的代码:

circuits = k:v for k,v in circuits.iteritems() if (v[0]+weightlimit <= histotal) in k

这段代码运行后,我在代码中唯一使用字典的地方收到了关于缺少键的错误。

这当然意味着有问题,因为 defaultdict 不会那样做。所以看来字典理解会把defaultdict改成字典。

这里最好的做法是什么?使用不同的过滤方法是否更有效,或者以某种方式将我的字典转换为 defaultdict 是否更有效?还有什么好方法呢?

谢谢!

【问题讨论】:

你能发布示例输入和所需的输出吗? 请不要发布代码链接。在问题本身中将代码作为格式化文本发布。提供minimal reproducible example 【参考方案1】:

一个 dict 理解产生的就是——一个 dict。因为你过滤了,它现在是一个字典——而不是一个默认字典。如果您想要这种行为,则需要将其包装在 defaultdict 中。

除非在此块中对性能有强烈需求,否则请坚持使用该方法。这是最干净的。但是don't prematurely optimize。分析您的代码并加快速度较慢的部分。

【讨论】:

以上是关于使用字典理解过滤 defaultdict的主要内容,如果未能解决你的问题,请参考以下文章

python根据键值过滤字典列表

如何使用 LINQ 过滤字典并将其返回到相同类型的字典

使用 nspredicate 进行字典过滤

在iOS中的字典中使用字典数组的NSPredicate进行过滤

Pyspark - 使用广播字典中的日期过滤 RDD

使用不区分大小写的搜索过滤字典