2016-09-09 4 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/ Альтернатива-на-dict-comprehension-before-to-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

Следует отметить, что в коде используется 'dict-понимание', которое было введено в python 2.7. Простое создание словаря вручную, как сделано здесь, является исправлением. Вот соответствующий [PEP 274] (https://www.python.org/dev/peps/pep-0274/) – ffledgling

Смежные вопросы