筛选字典只包含特定键?

790 投票
23 回答
671786 浏览
提问于 2025-04-16 02:24

我有一个 dict,里面有很多条目。我只对其中的几个感兴趣。有没有简单的方法可以把其他的都去掉呢?

23 个回答

76

这里有一个在 Python 2.6 中的例子:

>>> a = {1:1, 2:2, 3:3}
>>> dict((key,value) for key, value in a.iteritems() if key == 1)
{1: 1}

过滤的部分就是 if 语句。

如果你只想从很多键中选择少数几个,这种方法会比 delnan 的答案慢。

260

稍微优雅一点的字典推导式:

foodict = {k: v for k, v in mydict.items() if k.startswith('foo')}
976

构建一个新的字典:

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

这里使用了字典推导式。

如果你用的是不支持字典推导式的版本(比如 Python 2.6 及更早版本),可以用 dict((key, old_dict[key]) for ...) 来实现。虽然效果一样,但看起来会丑一些。

需要注意的是,这种方法和 jnnnnn 的版本不同,它的性能是稳定的(只和你的键的数量有关),无论 old_dict 的大小如何。无论是速度还是内存方面都是如此。因为这是一个生成器表达式,它一次处理一个项目,而不是一次性查看 old_dict 中的所有项目。

就地删除所有内容:

unwanted = set(old_dict) - set(your_keys)
for unwanted_key in unwanted: del your_dict[unwanted_key]

撰写回答