Итератор для списков и диктонар - PullRequest
1 голос
/ 16 марта 2012

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

Моя проблема заключается в том, чтобы наилучшим образом использовать итератор, который выполняет итерации списков и словарей.

Что у меня есть:

def parse_data(key, value):
    iterator = None

    if isinstance(value, dict):
        iterator = value.items()
    elif isinstance(value, list):
        iterator = enumerate(value)

    if iterator is not None:
        for key, item in iterator:
            parse_data(key, item)
        return

    # do some cool stuff with the rest

Это выглядит не очень питонски.Я подумал о функции, похожей на iter, дающей мне возможность перебирать и ключ, и элемент.

Надеюсь, вы поможете.Большое спасибо в продвинутом.

Ответы [ 2 ]

0 голосов
/ 16 марта 2012

Я не уверен, есть ли более короткий способ сделать это, но Python создан, чтобы делать одну вещь разными способами.Может быть, это может быть другой способ сделать это.Я не проверял его, поэтому он может не работать.

def parse_data(key,value):
    iterator = isinstance(value,dict) 

    if iterator is False and isinstance(value,list):
        iterator = enumerate(value)

    if iterator is not None: 
        for key,item in iterator: 
            parse_data(key,item) 
        return      

    #do some cool stuff with the rest 
0 голосов
/ 16 марта 2012

Я думаю, что это довольно питонично. Я бы просто изменил это на:

def parse_data:

    if isinstance(value, dict):
        iterator = value.items()
    elif isinstance(value, list):
        iterator = enumerate(value)
    else:
        return

    for key, item in iterator:
        parse_data(value, key, item)

    # do some cool stuff with the rest
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...