Я создал функцию, которая будет анализировать строку, которую вы предоставляете, с объектом словаря. Надеюсь, это поможет вам.
Преимущество здесь в том, что вы никогда не анализируете весь словарь и просто получаете требуемые значения. например, если вы хотите получить доступ к 4 ключам, разделенным .
, сложность будет равна 4. Он всегда будет возвращать результат в o (n), где n - количество ключей.
def get_value(dotted_str, dict_obj):
names = dotted_str.split('.')
current_level = dict_obj
for index, name in enumerate(names):
if index:
if isinstance(current_level, list):
current_level = current_level[int(name)]
else:
current_level = current_level[name]
return current_level
a_dict = {"a": {"this": 100, "is": 500, "nested": [{"first": 0}, {"second": ["I", "am", "list"]}]}, "b": [1, 2, 3, 4]}
get_value("a_dict.a.nested.1.second", a_dict)
Вывод код выше:
['I', 'am', 'list']