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

时间:2012-03-16 10:22:32

标签: python python-2.7

给出以下字典并设置:

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

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

3 个答案:

答案 0 :(得分:10)

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 - 集相交,并使用它们来构建新的字典:

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

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

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

答案 1 :(得分:3)

以下是两个不错的解决方案:

d = {1 : "a", 2 : "b", 3 : "c", 4 : "d", 5 : "e" }
keep_keys = set((1, 4))

# option 1, builds a new dictionary
d2 = {key:d[key] for key in set(d) & keep_keys}

# option 2, modifies the original dictionary
map(d.__delitem__, frozenset(d) - keep_keys)

如果你想要速度,你应该分析两者中的哪一个更快。

答案 2 :(得分:2)

另一种解决方案:

d = {1 : "a", 2 : "b", 3 : "c", 4 : "d", 5 : "e" }
s = set([1, 4])
r = { k:d[k] for k in ( d.viewkeys() - s ) }