Python3:通过理解从字典中有条件地提取键

时间:2013-07-11 00:37:18

标签: python dictionary python-3.x dictionary-comprehension

我需要提取值通过某个条件的字典的那些键。 基本上,我想这样做,只是用更短,更pythony的方式:

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]

是否有一种不那么混乱的方式呢?也许显而易见的是我明显失踪了?

谢谢!

3 个答案:

答案 0 :(得分:3)

这是一种获取具有真正值的键的方法,这些值比理解更简洁,更清晰(虽然理解不是很糟糕):

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

答案 1 :(得分:2)

使用dict.items()

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

如果您只想使用True值而非任何true-ish值的键,则可以使用等式检查:

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

PEP8中注意到,不应该使用==来比较布尔值 - 所以除非你绝对需要,否则不要使用它。

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

答案 2 :(得分:0)

迭代映射只产生键。请改用map.items()