Сопоставить функцию на указанном уровне для иерархических данных - PullRequest
0 голосов
/ 30 апреля 2019

Этот вопрос относится к этому .Что такое 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, где указание уровня является опцией для сопоставления:

enter image description here

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'}}}}
...