2016-09-09 34 views
-1

我有下面这段代码在2.7工作正常,但在2.6转换的Python 2.7的代码到Python 2.6

def recursively_prune_dict_keys(obj, keep): 
    if isinstance(obj, dict): 
     return {k: recursively_prune_dict_keys(v, keep) for k, v in obj.items() if k in keep} 
    elif isinstance(obj, list): 
     return [recursively_prune_dict_keys(item, keep) for item in obj] 
    else: 
     return obj 

失败,我得到无效的语法错误下面一行:

return {k: recursively_prune_dict_keys(v, keep) for k, v in obj.items() if k in keep} 

任何想法什么需要改变,使其在2.6的工作?

+2

http://stackoverflow.com/questions/21069668/替代字典理解-python-2-7 – cel

回答

2

替换列表解析由呼叫包裹字典解析(未在Python 2.6支持和下文),以dict()

return dict([(k, recursively_prune_dict_keys(v, keep)) 
      for k, v in obj.items() if k in keep]) 
+0

需要注意的是,代码使用了Python 2.7中引入的“dict comprehension”。简单地手工构建字典就像这里所做的那样,就是修复。这是相关的[PEP 274](https://www.python.org/dev/peps/pep-0274/) – ffledgling