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

时间:2016-11-16 22:23:56

标签: python list dictionary

假设我有这样的字典:

d = {27: 32, 28: 41, 29: 29, 30: 29, 31: 67, 32: 65}

列表:

l = [27, 30, 31]

for n in l:
            d2 = {k:v for k,v in d.items() if k in n}

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

3 个答案:

答案 0 :(得分: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)

输出:

{27: 32, 30: 29, 31: 67}

在迭代... if k in n时,列表理解中的表达式for n in l:意味着您正在搜索数字(数字)中的数字键 - 它就像我们正在搜索{{1}在这种情况下,这是毫无意义的 此外,在大序列的情况下,27 in 27对象将是优选的。

  

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

答案 1 :(得分:2)

做你想做的最有效的方法是:

d2 = {k:d[k] for k in l}

如果l包含d中没有键的项目,则可能

d2 = {k:d[k] for k in l if k in d}

答案 2 :(得分:0)

嗯,你的代码中有一个拼写错误:

System.out.print("hi");

d2 = {k:v for k,v in d.items() if k in n} 生成

  

TypeError:类型' int'的参数是不可迭代的

因为if k in n只能应用于可迭代对象。 如果将其更改为

in

它将正常工作并产生

  

D2
  {31:67}