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 中指出,不应使用 ==
比较布尔值 - 所以除非绝对需要,否则不要使用它。
另外,请不要将变量命名为 dict
或 map
(即使仅用于演示目的),因为它们会影响 bulitins。
【讨论】:
【参考方案3】:这是一种获取具有比推导更短和更清晰的真值的键的方法(虽然不是推导不好):
>>> dct = 0:False, 1:True, 2:False, 3:True
>>> list(filter(dct.get, dct))
[1, 3]
>>>
【讨论】:
你不需要dct.keys()
- 遍历字典已经产生了键。使用dct
以上是关于Python3:有条件地从具有理解的字典中提取键的主要内容,如果未能解决你的问题,请参考以下文章