'converting a string to dot notation to access value in nested list in python

items={
         "fruits":
            {
               "summerFruits":
                    {
                        "Mangoes":5,
                        "melon":2
                    }
             }
      }

i converted it to attribute

itemConverted = AttrDict(items)

now i know i can access this by

itemConverted.fruits.summerFruits.Mangoes

but the problem is , i am taking inputs from console as a string so it will be like

wanted="fruits.summerFruits.Mangoes"

i am trying to get it by

itemConverted.wanted

but it is not working , any suggestions



Solution 1:[1]

Get the dictionary keys from the string and then use the dictionary items to recover the value.

items={"fruits":{"summerFruits": {"Mangoes":5, "melon":2}}}


def get_val_from_str(string, dct):
    keys = string.split('.')
    v = dct
    for key in keys:
        v = v[key]
    return v

console_input = "fruits.summerFruits.Mangoes"
get_val_from_str(console_input, items)
#5

Solution 2:[2]

I could not think of a simple solution with the dictionnary converted through AttrDict. However, here is a basic workaround that works with your input :

items = {"fruits":{"summerFruits":{"Mangoes":5,"melon":2}}}
wanted = "fruits.summerFruits.Mangoes"

#Converts the input to a list of strings (previously separated by dots)
words_list = []
element = ''
for char in wanted:
    if char == '.': #chosen separator for input
        words_list.append(element)
        element = ''
    else:
        element = element + char
words_list.append(element)

#From the dict, get the value at the position indicated by the list of string keys
temp_dict = items
for key in words_list:
    temp_dict = temp_dict.get(key)

value = temp_dict

Hoping this would work for your application, even though the syntax for getting the output is slightly different.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 ARib