Имеем следующую структуру:
data = {
"some_list": [
{"key1": "some_value1", "key2", "some_value2" },
{"key1": "some_value1", "key2", "some_value2" },
{"key1": "some_value1", "key2", "some_value2" },
{"key1": "some_value1", "key2", "some_value2" },
]
}
Необходимо получать данные из структуры, передавая в качестве аргумента строку, которая представляет собой перечисленные ключи или индексы в порядке вложенности.
В первом случае на входе имеем в качестве аргумента строку:
s1 = "some_list.*.key1"
Во втором случае имеем в качестве аргумента строку:
s2 = "some_list.0.key1"
В первом случае результатом должен быть список из значений словарей с ключом key1.
Во втором случае просто одно значение.
Второй случай я решил следующим образом:
def get_val(data, field):
field = field.split(".")
eval_string = "data"
for f in field:
if f.isdigit():
eval_string += "[{}]".format(f)
else:
eval_string += "['{}'}".format(f)
return eval(eval_string)
result = get_val(data, s2)
print(result)
# som_value1
Как переписать функцию get_val так, чтобы при указании звездочки вместо индекса, выводился список?