关于python:如何过滤dict以仅包含给定列表中的键?

How to filter a dict to contain only keys in a given list?

本问题已经有最佳答案,请猛点这里访问。

对于python和stackoverflow都是非常新的。谢谢你的耐心和帮助。

我想根据如下列表的内容筛选dict:

1
2
3
4
5
d={'d1':1, 'd2':2, 'd3':3}

f = ['d1', 'd3']

r = {items of d where the key is in f}

这是荒谬的吗?如果不是,正确的语法是什么?

谢谢你的帮助。

文森特


假设您想创建一个新字典(无论出于什么原因):

1
2
3
4
5
6
d = {'d1':1, 'd2':2, 'd3':3}
keys = ['d1', 'd3']

filtered_d = dict((k, d[k]) for k in keys if k in d)
# or: filtered_d = dict((k, d[k]) for k in keys)
# if every key in the list exists in the dictionary


您可以通过列表理解对列表进行迭代,并在字典中查找键,例如

1
aa = [d[k] for k in f]

下面是一个成功的例子。

1
2
3
4
5
>>> d = {'k1': 1, 'k2': 2, 'k3' :3}
>>> f = ['k1', 'k2']
>>> aa = [d[k] for k in f]
>>> aa
[1, 2]

如果要根据结果重新构造字典,可以捕获元组列表中的键并转换为dict,例如。

1
aa = dict ([(k, d[k]) for k in f])

更新版本的python(特别是2.7、3)有一个称为dict理解的特性,它可以一键完成所有的工作。在这里更深入地讨论。