Nano Hash - криптовалюты, майнинг, программирование

очистка ключей диктовки во вложенной диктовке диктовок и списках диктовок

У меня также есть вложенный словарь со списком словарей, а некоторые из моих ключей имеют специальные символы. Каков наилучший способ удалить эти специальные символы из ключей.

Ниже я пытался работать с диктовками диктов, но как я могу расширить его, чтобы позаботиться и о списке диктовок.

>>> a={"@pipeline": "start",  "@args": "-vv", "@start": "1598331637", "@info": {"@pipeline_stage": "tasks","@taskbegin": [{"@task": "1", "@time": "1598331638"}, {"@task": "2", "@time": "1598331638"}, {"@task": "3", "@time": "1598331638"}]}}
>>> a
{'@pipeline': 'start', '@args': '-vv', '@start': '1598331637', '@info': {'@pipeline_stage': 'tasks', '@taskbegin': [{'@task': '1', '@time': '1598331638'}, {'@task': '2', '@time': '1598331638'}, {'@task': '3', '@time': '1598331638'}]}}
>>> def _clean_keys(d):
...     return {''.join(filter(str.isalnum, k)): _clean_keys(v) for k, v in d.items()} if isinstance(d, dict) else d
... 
>>> _clean_keys(a)
{'pipeline': 'start', 'args': '-vv', 'start': '1598331637', 'info': {'pipelinestage': 'tasks', 'taskbegin': [{'@task': '1', '@time': '1598331638'}, {'@task': '2', '@time': '1598331638'}, {'@task': '3', '@time': '1598331638'}]}}
>>> 

Как видите, список запуска задач не очищается.


Ответы:


1

Использование рекурсии

Пример:

a={"@pipeline": "start",  "@args": "-vv", "@start": "1598331637", "@info": {"@pipeline_stage": "tasks","@taskbegin": [{"@task": "1", "@time": "1598331638"}, {"@task": "2", "@time": "1598331638"}, {"@task": "3", "@time": "1598331638"}]}}
def _clean_keys(d):
    res = {}
    if isinstance(d, dict):
        for k, v in d.items():   
            k = ''.join(filter(str.isalnum, k))      
            if isinstance(v, list):                   #Check if type of value is list
                res[k] = [_clean_keys(i) for i in v]  #use recursion
            else:
                res[k]= _clean_keys(v)
            
    else:
        res = d           
        
    return res

print(_clean_keys(a))

Вывод:

{'args': '-vv',
 'info': {'pipelinestage': 'tasks',
          'taskbegin': [{'task': '1', 'time': '1598331638'},
                        {'task': '2', 'time': '1598331638'},
                        {'task': '3', 'time': '1598331638'}]},
 'pipeline': 'start',
 'start': '1598331637'}
27.08.2020

2

Попробуйте это, работает нормально

Код

def clean_dict(val):
    if type(val) == list:
        return clean_list(val)
    if type(val) == dict:
        return {clean(k) : clean_dict(v) for k, v in val.items()}
    return val

def clean_list(val):
    return [clean_dict(v) for v in val]

def clean(val):
   ''.join([c for c in val if c.isalnum()])

Вывод

a={"@pipeline": "start",  "@args": "-vv", "@start": "1598331637", "@info": {"@pipeline_stage": "tasks","@taskbe
gin": [{"@task": "1", "@time": "1598331638"}, {"@task": "2", "@time": "1598331638"}, {"@task": "3", "@time": "1
598331638"}]}}

clean_dict(a)
Out[8]:
{'pipeline': 'start',
 'args': '-vv',
 'start': '1598331637',
 'info': {'pipelinestage': 'tasks',
  'taskbegin': [{'task': '1', 'time': '1598331638'},
   {'task': '2', 'time': '1598331638'},
   {'task': '3', 'time': '1598331638'}]}}
27.08.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..