dict过滤 python_关于python:过滤dict以只包含某些键?

我有一个dict,有很多条目。我只对其中一些感兴趣。有没有一种简单的方法可以把其他的修剪掉?

构建新的dict:

dict_you_want = { your_key: old_dict[your_key] for your_key in your_keys }

使用字典理解。

如果您使用的版本缺少它们(如python 2.6和更早版本),请使用dict((your_key, old_dict[your_key]) for ...)。这是一样的,虽然更丑。

请注意,与Jnnnn的版本不同,这对于任何大小的old_dict都具有稳定的性能(仅取决于您的密钥数量)。无论是速度还是记忆。因为这是一个生成器表达式,所以它一次只处理一个项目,而不查看旧字典的所有项目。

移除所有东西:

unwanted = set(keys) - set(your_dict)

for unwanted_key in unwanted: del your_dict[unwanted_key]

不知道你也能听写理解…漂亮!这是一个很好的解决方案。

"使用字典理解,如果使用缺少字典的版本"==版本<=2.6

如果其中一个文件管理器键不在旧的_dict中,则引发keyError。如果在d_中有k,则建议在filter中为k执行k:d[k]

@是的,如果这是需求的一部分,你需要做些什么。无论是静默地删除键、添加默认值还是其他什么,都取决于您正在做什么;在许多用例中,您的方法是错误的。还有很多地方,old_dict中缺少的键指示其他地方存在错误,在这种情况下,我非常喜欢错误,而不是默许错误的结果。

@Delnan,还有"if k in d"的加法,如果d很大,会减慢速度,我只是觉得值得一提。

@不是的,字典查找是O(1)。

@德尔南,对吧-当然

如果您不想在密钥不存在的情况下抛出错误,则可以这样操作:dict_you want=dict((key,old_dict[key])for key in[k for k in your_keys if k in old_dict])

很好的解释,特别是O(1)

NIT:字典是散列图,所以正常情况下是O(1)。最坏(极不可能)的情况是O(N),但取决于哈希冲突的可能性。你需要一本天文大字典,或者一个非常粗糙的哈希算法来开始发现这是一个问题。stackoverflow.com/a/1963514/1335793

我认为这应该是"不需要的=集(键)&set(您的口述)",即设置交集(&;),而不是设置差(-)。假设密钥是不需要的密钥列表。

稍微优雅一点的听

你可能感兴趣的:(dict过滤,python)