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

Vin*_*ent 8 python dictionary list filter

这两者都是Python和stackoverflow的新手.感谢您的耐心和帮助.

我想根据列表的内容过滤一个字典,如下所示:

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

f = ['d1', 'd3']

r = {items of d where the key is in f}
Run Code Online (Sandbox Code Playgroud)

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

谢谢您的帮助.

文森特

Fel*_*ing 16

假设您要创建一个新字典(无论出于何种原因):

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
Run Code Online (Sandbox Code Playgroud)

  • `filtered_d = {k:v for k,v in d.items() if k in d}` -- 对于那些寻找字典理解 (dictcomp) 的人 (3认同)

Con*_*lls 5

您可以使用列表理解迭代列表并查找字典中的键,例如

aa = [d[k] for k in f]
Run Code Online (Sandbox Code Playgroud)

这是它的工作示例。

>>> d = {'k1': 1, 'k2': 2, 'k3' :3}
>>> f = ['k1', 'k2']
>>> aa = [d[k] for k in f]
>>> aa
[1, 2]
Run Code Online (Sandbox Code Playgroud)

如果您想从结果重建字典,您也可以捕获元组列表中的键并转换为字典,例如

aa = dict ([(k, d[k]) for k in f])
Run Code Online (Sandbox Code Playgroud)

Python 的最新版本(特别是 2.7、3)有一项称为字典理解的功能,只需一次即可完成所有操作。这里更深入地讨论