
Приветствую. Имеется словарь:
example = {"count":"5","list":[ {"Name":"name1","Surname":"surname1","Age":"age1"}, {"Name":"name2","Surname":"surname2","Age":"age2"}, {"Name":"name3","Surname":"surname3","Age":"age3"}, {"Name":"name4","Surname":"surname4","Age":"age4"}, {"Name":"name5","Surname":"surname5","Age":"age5"} ]}
Нужно получить значение в одном из вложенных в список словарей. По индексу все просто:
example = {"count":"5","list":[ {"Name":"name1","Surname":"surname1","Age":"age1"}, {"Name":"name2","Surname":"surname2","Age":"age2"}, {"Name":"name3","Surname":"surname3","Age":"age3"}, {"Name":"name4","Surname":"surname4","Age":"age4"}, {"Name":"name5","Surname":"surname5","Age":"age5"} ]} result = example["list"][4]["Age"] print (result) # Результат: age5
Но как быть, если индекс списка заранее неизвестен (может меняться), но есть только известная пара "Surname":"surname5"
, которая не меняется? Т.е. чтобы искомый словарь можно было найти по «surname5» вне зависимости от того, под каким индексом он может оказаться и получить значение из «Age».
2Answers

Все что удалось найти:
Еще может заинтересовать:
Еще может заинтересовать:

def func(): for dictionary in example["list"]: if "Surname" in dictionary and dictionary["Surname"] == "surname5": return dictionary # assert func()["Age"] == "age5"

Чтобы найти в списке example['list']
словарь, содержащий 'Surname'
ключ со значением 'surname5'
и достать из этого словаря значение 'Age'
ключа в Питоне:
result = next(d['Age'] for d in example['list'] if d.get('Surname') == 'surname5')
В командной строчке, можно jq
использовать:
$ jq -r '.list[] | select(.Surname=="surname5") | .Age' input.json