筛选字典只包含特定键?
我有一个 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]