使用列表中的值过滤dict中的键值

use*_*110 1 python dictionary list

假设我有这样的字典:

d = {27: 32, 28: 41, 29: 29, 30: 29, 31: 67, 32: 65}
Run Code Online (Sandbox Code Playgroud)

还有一个清单:

l = [27, 30, 31]

for n in l:
            d2 = {k:v for k,v in d.items() if k in n}
Run Code Online (Sandbox Code Playgroud)

为什么不允许这样做?我该怎么做?

Rom*_*est 7

以这种方式获得过滤的dict就足够了:

d = {27: 32, 28: 41, 29: 29, 30: 29, 31: 67, 32: 65}
l = set([27, 30, 31])
d2 = {k:v for k,v in d.items() if k in l}

print(d2)
Run Code Online (Sandbox Code Playgroud)

输出:

{27: 32, 30: 29, 31: 67}
Run Code Online (Sandbox Code Playgroud)

... if k in n迭代时列表理解中的表达for n in l:意味着您正在搜索数字(数字)中的数字键 - 就像我们正在搜索27 in 27在这种情况下无意义的那样.
而且,set在大序列的情况下,对象将是优选的.

集合和字典的成员资格测试比搜索序列O(n)快得多,O(1)