Рассмотрим словарь со следующей вложенной структурой:

d = {"a0": {"b0": {"c0": 0}, "b1": 1}, "a1": 2}

Каким был бы быстрый и элегантный способ перейти от списка ключей, таких как ["a0", "b0", "c0"], к его значению d["a0"]["b0"]["c0"] в общем случае?

Другими словами, есть ли способ сделать следующее выражение однострочным:

val = 0
for k in key_list:
    val = val[key]

Большое спасибо!

0
José Luiz Ferreira 1 Ноя 2019 в 13:30
1
Я не понимаю, вы хотите перебрать все возможные ключи? Чтобы получить просто значение, вы можете сделать то, что написали: d["a0"]["b0"]["c0"]
 – 
Grzegorz Skibinski
1 Ноя 2019 в 13:43
Нет, я хочу передать ключи по порядку, используя список, как в цикле for.
 – 
José Luiz Ferreira
4 Ноя 2019 в 09:11

1 ответ

Это, я думаю, было бы довольно элегантно:

def dict_get(d, param):
    if(len(param)>0 and len(d)>0):
        return dict_get(d.get(param[0], {}), param[1:])
    else:
        return d

d = {"a0": {"b0": {"c0": 0}, "b1": 1}, "a1": 2}

ind=["a0", "b0", "c0"]

print(dict_get(d, ind))
0
Grzegorz Skibinski 4 Ноя 2019 в 20:52