read json file nested dictionary

Question:

consider this example

{
    "items": {
      "PYGXGE": {
        "id": "a",
        "number": "1"
      },
      "sbe7oa": {
        "id": "b",
        "number": "2"
      },
      "sbe7ob": {
        "id": "c",
        "number": "3"
      },
      "sbe7oc": {
        "id": "d",
        "number": "4"
      },
      "sbe7od": {
        "id": "e",
        "number": "5"
      },
      "sbe7oe": {
        "id": "f",
        "number": "6"
      }
    }
}

i want to access all nested number values, how can I do that in python here is my code so far:

import json

f = open('sample.json')
data = json.load(f)
  
for i in data['items']:
    print(i)
f.close()

also, is this format for json better or list of dict?

Asked By: vdotup

||

Answers:

You can use this

import json

f = open('sample.json')
data = json.load(f)
  
for i in data['items']:
    print(i)
    print(data['items'][i]['number'])
f.close()

It depends on how you want to store the data and what data structure suits your need. If you want to store your data separately and planning to make that accessible through other files over the network, JSON file is my way to go.

Answered By: Talkhak1313

You could also make good use of the values() method:

for item in data["items"].values():
    print(item["number"])

If you want to get all numbers to a list, you could use list comprehension:

numbers = [str(item["number"]) for item in data["items"].values()]

If you need to access individual items frequently, then the dictionary format is more efficient, because you can access values by their keys O(1) time. Ultimately, the choice between a dictionary and a list of dictionaries should be based on your specific needs of your use case.

Answered By: Jamiu S.

A recursive analysis of the Python dictionary facilitates identifying values at any level – i.e., not limited to the structure shown in the question.

All that’s required are the values associated with a key ‘number’ that might be found in any dictionary.

Therefore:

data = {
    "items": {
      "PYGXGE": {
        "id": "a",
        "number": "1"
      },
      "sbe7oa": {
        "id": "b",
        "number": "2"
      },
      "sbe7ob": {
        "id": "c",
        "number": "3"
      },
      "sbe7oc": {
        "id": "d",
        "number": "4"
      },
      "sbe7od": {
        "id": "e",
        "number": "5"
      },
      "sbe7oe": {
        "id": "f",
        "number": "6"
      }
    }
}

def process(d):
    def _process(_d, _list):
        if isinstance(_d, dict):
            if 'number' in _d:
                _list.append(_d['number'])
            else:
                for _v in _d.values():
                    _process(_v, _list)
        elif isinstance(_d, list):
            for _v in _d:
                _process(_v, _list)
        return _list
    return _process(d, list())

print(process(data))

Output:

['1', '2', '3', '4', '5', '6']
Answered By: Pingu
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.