Python3:有条件地从具有理解的字典中提取键

Posted

技术标签:

【中文标题】Python3:有条件地从具有理解的字典中提取键【英文标题】:Python3: Conditional extraction of keys from a dictionary with comprehension 【发布时间】:2013-07-09 03:00:55 【问题描述】:

我需要提取值通过特定条件的字典的那些键。 基本上,我想这样做,只是以更短、更 Python 的方式:

keys=[]
for key in dict:
    if dict[key]==True:
        keys.append(key)

这是我最初的想法,但它引发了 ValueError:

[key for (key,val) in map if val==True]

我暂时想到了这个,但我不禁觉得它不是很好:

[key for key in map.keys() if map[key]==True]

有没有更简单的方法呢?也许我明显错过了一些明显的东西?

谢谢!

【问题讨论】:

【参考方案1】:

遍历映射只会产生键。请改用map.items()

【讨论】:

问题标记为(在标题中)Python 3,因此dict.iteritems() 不存在。【参考方案2】:

使用dict.items()

[key for key, val in dct.items() if val]

如果您只想获取具有 True 值的键,而不是任何真值,则可以使用相等检查:

[key for key, val in dct.items() if val==True]

PEP8 中指出,不应使用 == 比较布尔值 - 所以除非绝对需要,否则不要使用它。

另外,请不要将变量命名为 dictmap(即使仅用于演示目的),因为它们会影响 bulitins。

【讨论】:

【参考方案3】:

这是一种获取具有比推导更短和更清晰的真值的键的方法(虽然不是推导不好):

>>> dct = 0:False, 1:True, 2:False, 3:True
>>> list(filter(dct.get, dct))
[1, 3]
>>>

【讨论】:

你不需要dct.keys() - 遍历字典已经产生了键。使用dct

以上是关于Python3:有条件地从具有理解的字典中提取键的主要内容,如果未能解决你的问题,请参考以下文章

如何有效地从大型数据框字典中提取同一列? (性能警告)

C#如何创建具有多个相同键的字典? [复制]

Swift映射嵌套字典以交换外部和内部键

SQL Join 一对多从满足条件的相同键值组中提取值

列表理解以收集具有最内层键的嵌套字典项目

攻克python3-字典(第四篇)