Получение всех сочетаний клавиш в json / словаре в python - PullRequest
0 голосов
/ 29 марта 2019

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

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

Например:

myjson = {'transportation':'car',
'address': {'driveway':'yes','home_address':{'state':'TX',
'city':'Houston'}},
 'work_address':{
'state':'TX',
'city':'Sugarland',
 'location':'office-tower',
 'salary':30000}}

Было бы здорово, если бы я мог запустить какой-то цикл, чтобы получить список обратно в этом формате ниже или в формате ....

myjson ['address'] ['driveway']

myjson.address myjson.address.driveway myjson.address.home_address myjson.address.home_address.city myjson.address.home_address.state myjson.транспорт myjson.work_address myjson.work_address.city myjsonationworkwork_address.salary myjson.work_address.state

Например, я начал с

mylist = []

for  key, value in myjson.items():
    mylist.append(key)
    if type(value) is dict:
        for key2, value2 in myjson[key].items():
        mylist.append(key+'.'+key2)
print(mylist)

Полагаю, это вроде работает, но я не знаю, как сделать это повторяться бесконечно.Например, как бы я построил это до 3-10 + слоев?

1 Ответ

0 голосов
/ 29 марта 2019

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

myjson = {
    'transportation': 'car',
    'address': {
        'driveway': 'yes',
        'home_address': {
            'state': 'TX',
            'city': 'Houston'}
    },
    'work_address': {
        'state': 'TX',
        'city': 'Sugarland',
        'location': 'office-tower',
        'salary': 30000}
}


def get_keys(some_dictionary, parent=None):
    for key, value in some_dictionary.items():
        if '{}.{}'.format(parent, key) not in my_list:
            my_list.append('{}.{}'.format(parent, key))
        if isinstance(value, dict):
            get_keys(value, parent='{}.{}'.format(parent, key))
        else:
            pass


my_list = []
get_keys(myjson, parent='myjson')
print(my_list)

Выводы:

['myjson.transportation',
'myjson.work_address',
'myjson.work_address.city',
'myjson.work_address.state',
'myjson.work_address.location',
'myjson.work_address.salary',
'myjson.address',
'myjson.address.driveway',
'myjson.address.home_address',
'myjson.address.home_address.city',
'myjson.address.home_address.state']

Ключ в том, чтобы просто продолжать вызывать get_keys() изнутри функции рекурсивно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...