从python中不在列表中的对象中删除键?

Set*_*una 9 python

我有这些钥匙:

keep = ["a","c"]
Run Code Online (Sandbox Code Playgroud)

我的词:

testdict = {'
'a':'vala',
'b':'valb',
'c':'valc',
'd':'vald'
}
Run Code Online (Sandbox Code Playgroud)

期望的输出:

testdict = {
'a':'vala',
'c':'valc'
}
Run Code Online (Sandbox Code Playgroud)

我想删除与列表中的键不匹配的所有键.最快的方法是什么?

我试过了:

for key, value in testdict.iteritems():
      if key not in keep:
         del testdict[key]
Run Code Online (Sandbox Code Playgroud)

但是由于尺寸变化,上面给出了错误.

phi*_*hag 16

而不是删除,只需构造一个新的字典:

newdict = {k: testdict[k] for k in keep}
Run Code Online (Sandbox Code Playgroud)

如果keep可以包含testdict中不存在的键,请添加适当的条件:

newdict = {k: testdict[k] for k in keep if k in testdict}
Run Code Online (Sandbox Code Playgroud)

如果你绝对必须修改dict对象,请记住,当你遍历它时,你不能修改字典.因此先遍历然后删除:

to_delete = set(testdict.keys()).difference(keep)
for d in to_delete:
    del testdict[d]
Run Code Online (Sandbox Code Playgroud)


Jor*_*ley 3

print({k:testDict[k] for k in keep})
Run Code Online (Sandbox Code Playgroud)

或 py<2.7

print dict((k,testDict[k]) for k in keep)
Run Code Online (Sandbox Code Playgroud)

这些假设 keep 中的每个密钥都保证存在于testDict