9

我需要提取值通过特定条件的字典的那些键。基本上,我想这样做,只是以更短、更 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]

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

谢谢!

4

3 回答 3

5

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

>>> dct = {0:False, 1:True, 2:False, 3:True}
>>> list(filter(dct.get, dct))
[1, 3]
>>>
于 2013-07-11T01:22:46.907 回答
3

利用dict.items()

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

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

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

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

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

于 2013-07-11T00:39:22.687 回答
0

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

于 2013-07-11T00:39:12.297 回答