假设我有这样的字典:
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}
为什么不允许这样做?我该怎么做呢?
答案 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}