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)
为什么不允许这样做?我该怎么做?
以这种方式获得过滤的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)