从列表中删除字典的子集

7 投票
4 回答
3034 浏览
提问于 2025-04-11 09:30

这个问题其实用一个例子来解释会更简单,所以如果我想从字典中去掉一个列表的交集,通常我会这样做:

a = {1:'', 2:'', 3:'', 4:''}
exclusion = [3, 4, 5]

# have to build up a new list or the iteration breaks
toRemove = []
for var in a.iterkeys():
    if var in exclusion:
        toRemove.append(var)

for var in toRemove:
    del a[var]

这可能看起来是个不太常见的例子,但让我惊讶的是,我遇到过很多次需要这样做的情况。用集合来处理这个问题会更好,但我显然还是想保留字典中的“值”。

这个方法有点麻烦,因为它需要两个循环和一个额外的数组。有没有更简单、更高效的方法来做到这一点呢?

4 个回答

2

为什么不直接使用 keys 方法,而要用 iterkeys 呢?这样的话,你可以只用一个循环,因为 keys 返回的是一个列表,而不是一个迭代器。

3

在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这些问题可能是因为我们没有正确理解某些概念或者使用了不合适的代码。对于初学者来说,理解这些概念是非常重要的,因为它们是编程的基础。

当我们在写代码时,可能会用到一些特定的语法和规则。如果不小心写错了,程序就会出错。比如说,如果你在代码中漏掉了一个符号,或者把某个词拼错了,程序就可能无法正常运行。

另外,编程语言之间也有差异。有些语言的语法比较简单,而有些则比较复杂。初学者在学习时,最好选择一种简单易懂的语言,这样可以更快上手,减少挫折感。

总之,编程就像学习一种新的语言,需要不断练习和积累经验。遇到问题时,不要气馁,可以通过查阅资料或者请教他人来解决。只要坚持下去,你一定能掌握这门技能。

a = dict((key,value) for (key,value) in a.iteritems() if key not in exclusion)
15

考虑一下 dict.pop 这个方法:

for key in exclusion:
     a.pop(key, None)

这里的 None 是用来防止当你查找的 key 不是字典中的一个有效键时,出现错误的。

撰写回答