Этот вопрос относится к этому .Что такое Pythonic способ сопоставить функцию с заданным уровнем спецификации.
Спецификация уровня должна поддерживать срезы для отображения на несколько уровней или, скажем, -1 (конечные узлы).
Это применимо к иерархическим комбинациям dict, list или iterables - например, полученным издесериализация JSON.
Дано
data = [{'a': 1, 'b': {'c':[2,3]}},{'a':10,'b':{'c':[12,13]}}]
, например, _map(f,data,-1)
должно вернуться
[{'a': f(1), 'b': {'c':[f(2),f(3)]}},{'a':f(10),'b':{'c':[f(12),f(13)]}}]
_map(f,data,[2,3])
должно вернуться:
[{'a': f (1), 'b': f ({'c': f ([2,3])}}), {'a': f (10), 'b': f ({'c': f ([12,13])})}]
Есть ли в пакете ast утилиты, которые могут это облегчить?
На снимке экрана показаны соответствующие и еще пара примеровна языке Wolfram Language, где указание уровня является опцией для сопоставления:
EDIT
Вот практическийиллюстрации.Учитывая эту структуру каталогов, как отфильтровать файлы OSX '.DS_Store', которые могут присутствовать в большинстве папок?
{'Data': {'.DS_Store': '~/Data/.DS_Store',
'Folder2': {'file3.rtf': '~/Data/Folder2/file3.rtf'},
'Folder1': {'file0.rtf': '~/Data/Folder1/file0.rtf',
'.DS_Store': '~/Data/Folder1/.DS_Store',
'Folder13': {},
'Folder12': {'file2.rtf': '~/Data/Folder1/Folder12/file2.rtf',
'file1.rtf': '~/Data/Folder1/Folder12/file1.rtf',
'.DS_Store': '~/Data/Folder1/Folder12/.DS_Store'}}}}