Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 27, 2012 16:48:38

int_0x80
Зарегистрирован: 2012-09-27
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Доступ к элементу словаря по пути

Привет, есть примерно такой словарь

{
"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']
Благодарю

Отредактировано int_0x80 (Сен. 27, 2012 16:49:42)

Офлайн

#2 Сен. 27, 2012 17:32:28

d1ffuz0r
От: Moscow
Зарегистрирован: 2011-03-25
Сообщения: 127
Репутация: +  5  -
Профиль   Отправить e-mail  

Доступ к элементу словаря по пути

как вариант получить можно так. как установить вариант из первой строки гугла http://habrahabr.ru/qa/17700/

http://ideone.com/Ej3Io

Отредактировано d1ffuz0r (Сен. 27, 2012 17:59:59)

Офлайн

#3 Сен. 28, 2012 03:24:20

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Доступ к элементу словаря по пути

>>> 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']
>>>



Офлайн

#4 Окт. 4, 2012 11:31:20

int_0x80
Зарегистрирован: 2012-09-27
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Доступ к элементу словаря по пути

А как в setval автоматически создавать узлы, в случае их отсутствия?

Офлайн

#5 Окт. 4, 2012 13:55:53

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Доступ к элементу словаря по пути

сделай отдельную функцию, прокладывающую путь



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version