fork download
  1. T = {
  2. "dw-table": {
  3. "filters": "null",
  4. "column-vis": ["true", "true", "true", "true", "true", "true"],
  5. "disp-len": "15"
  6. },
  7. "st-table": {
  8. "filters": {
  9. "group": "5"
  10. },
  11. "disp-len": "100",
  12. "column-vis": ["true", "true", "true", "true", "true"]
  13. },
  14. "ls-table": {
  15. "filters": {
  16. "group": "0"
  17. },
  18. "column-vis": ["true", "true", "true", "true", "true", "true", "true", "true", "true", "true"],
  19. "disp-len": "15"
  20. },
  21. "proj-table": {
  22. "filters": {
  23. "group": "1",
  24. "links_count": {
  25. "begin": "1",
  26. "end": "",
  27. "type": "range"
  28. }
  29. }
  30. },
  31. "lsp-table": {
  32. "filters": {
  33. "group": "0",
  34. "links_count": "null"
  35. }
  36. }
  37. }
  38.  
  39. def get(lis, name):
  40. if isinstance(name, str):
  41. name = name.split('/')[1:]
  42. if not isinstance(lis, dict):
  43. return lis
  44. return get(lis.get(name[0]), name[1:])
  45.  
  46. def editByXpath(dict, path, val):
  47. if isinstance(path, str):
  48. path = path.split('/')[1:]
  49. try:
  50. if path[0].isdigit():
  51. p = int(path[0])
  52. else:
  53. p = path[0]
  54. if len(path) == 1:
  55. dict[p] = val
  56. return
  57. else:
  58. editByXpath(dict[p], path[1:], val)
  59. except:
  60. raise KeyError()
  61.  
  62.  
  63. def main():
  64. print get(T, '/dw-table/column-vis')
  65. print get(T, '/lsp-table/filters/group')
  66. editByXpath(T, '/lsp-table/filters/group', "lol")
  67. print get(T, '/lsp-table/filters/group')
  68.  
  69. if __name__ == '__main__':
  70. main()
Success #stdin #stdout 0.08s 10848KB
stdin
Standard input is empty
stdout
['true', 'true', 'true', 'true', 'true', 'true']
0
lol