Найти - Пользователи
Полная версия: Доступ к элементу словаря по пути
Начало » Python для новичков » Доступ к элементу словаря по пути
1
int_0x80
Привет, есть примерно такой словарь
{
"dw-table": {
"filters": "null",
"column-vis": ["true", "true", "true", "true", "true", "true"],
"disp-len": "15"
},
"st-table": {
"filters": {
"group": "5"
},
"disp-len": "100",
"column-vis": ["true", "true", "true", "true", "true"]
},
"ls-table": {
"filters": {
"group": "0"
},
"column-vis": ["true", "true", "true", "true", "true", "true", "true", "true", "true", "true"],
"disp-len": "15"
},
"proj-table": {
"filters": {
"group": "1",
"links_count": {
"begin": "1",
"end": "",
"type": "range"
}
}
},
"lsp-table": {
"filters": {
"group": "0",
"links_count": "null"
}
}
}
Как мне получить объект по пути /path/to/obj
Пример: /dw-table/column-vis мне вернет
["true", "true", "true", "true", "true", "true"]
/lsp-table/filters/group -> 0

И наоборот, назначить значение по пути
/lsp-table/filters/group = 10
/dw-table/column-vis = ['true', 'false']
Благодарю
d1ffuz0r
как вариант получить можно так. как установить вариант из первой строки гугла http://habrahabr.ru/qa/17700/

http://ideone.com/Ej3Io

py.user.next
>>> d = {
...     "dw-table": {
...         "filters": "null",
...         "column-vis": ["true", "true", "true", "true", "true", "true"],
...         "disp-len": "15"
...     },
...     "st-table": {
...         "filters": {
...             "group": "5"
...         },
...         "disp-len": "100",
...         "column-vis": ["true", "true", "true", "true", "true"]
...     },
...     "ls-table": {
...         "filters": {
...             "group": "0"
...         },
...         "column-vis": ["true", "true", "true", "true", "true", "true", "true", "true", "true", "true"],
...         "disp-len": "15"
...     },
...     "proj-table": {
...         "filters": {
...             "group": "1",
...             "links_count": {
...                 "begin": "1",
...                 "end": "",
...                 "type": "range"
...             }
...         }
...     },
...     "lsp-table": {
...         "filters": {
...             "group": "0",
...             "links_count": "null"
...         }
...     }
... }
>>> 
>>> def getval(d, s):
...     for i in s.lstrip('/').split('/'):
...         d = d[i]
...     return d
... 
>>> def setval(d, s, val):
...     tmp = s.lstrip('/').split('/')
...     left, right = tmp[:-1], tmp[-1]
...     for i in left:
...         d = d[i]
...     d[right] = val
... 
>>> print(getval(d, '/dw-table/column-vis'))
['true', 'true', 'true', 'true', 'true', 'true']
>>> setval(d, '/dw-table/column-vis', ['true', 'true'])
>>> print(getval(d, '/dw-table/column-vis'))
['true', 'true']
>>>
int_0x80
А как в setval автоматически создавать узлы, в случае их отсутствия?
py.user.next
сделай отдельную функцию, прокладывающую путь
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB