Обращение к элементу списка (вложенному в словарь) не зная индекс

502 просмотра
0
0 Комментариев

Приветствую. Имеется словарь:

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».


Добавить комментарий

2 Answers

Python Опубликовано 12.12.2018
0

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

Добавить комментарий
0

Чтобы найти в списке 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

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up