Remove keys from object not in a list in python?
本问题已经有最佳答案,请猛点这里访问。
我有这些钥匙:
1 | keep = ["a","c"] |
我的字典:
1 2 3 4 5 6 | testdict = {' 'a':'vala', 'b':'valb', 'c':'valc', 'd':'vald' } |
期望输出:
1 2 3 4 | testdict = { 'a':'vala', 'c':'valc' } |
我想删除所有与列表中的键不匹配的键。最快的方法是什么?
我试过:
1 2 3 | for key, value in testdict.iteritems(): if key not in keep: del testdict[key] |
但由于尺寸在变化,上面给了我错误。
不要删除,只需构建一个新的dict:
1 | newdict = {k: testdict[k] for k in keep} |
如果
1 | newdict = {k: testdict[k] for k in keep if k in testdict} |
如果必须修改dict对象,请记住在遍历字典时不能修改它。所以首先遍历,然后删除:
1 2 3 | to_delete = set(testdict.keys()).difference(keep) for d in to_delete: del testdict[d] |
问题是,在使用迭代器时要改变键。如果你有一个合适的钥匙列表,你就可以避免这个问题。
1 2 3 | for key, value in list(testdict.keys()): if key not in keep: del testdict[key] |
1 | print({k:testDict[k] for k in keep}) |
或在Py<2.7
1 | print dict((k,testDict[k]) for k in keep) |
这些假设保留的每个密钥都保证存在于