删除不在集合中的字典条目


问题内容

给定以下字典并设置:

d = {1 : a, 2 : b, 3 : c, 4 : d, 5 : e }
s = set([1, 4])

我想知道是否有可能删除集合中未包含的所有字典条目(即2,3,5)。我知道我可以通过遍历字典并检查每个键来实现这一点,但是由于我是Python的新手,并且到目前为止遇到了许多“快捷方式”,所以我想知道是否存在针对此特定问题的快捷方式。


问题答案:
d = {1 : 'a', 2 : 'b', 3 : 'c', 4 : 'd', 5 : 'e' }
s = set([1, 4])

由于在迭代字典时不应修改字典,因此有两种创建新字典的可能性。

一种是从旧的过滤值中创建一个新的字典:

d2 = dict((k,v) for k,v in d.iteritems() if k in s)

第二个是提取键,将它们与s-set相交,然后使用它们来构建新字典:

d2 = dict((k, d[k]) for k in set(d) & s)

第三个是直接从中删除元素d

for k in set(d) - s:
    del d[k]