Обращение к элементу списка (вложенному в словарь) не зная индекс
Но как быть, если индекс списка заранее неизвестен (может меняться), но есть только известная пара «Surname»:»surname5″ , которая не меняется? Т.е. чтобы искомый словарь можно было найти по «surname5» вне зависимости от того, под каким индексом он может оказаться и получить значение из «Age».
Отслеживать
149k 12 12 золотых знаков 59 59 серебряных знаков 132 132 бронзовых знака
задан 13 апр 2018 в 18:44
Olaf Gusterson Olaf Gusterson
37 1 1 золотой знак 1 1 серебряный знак 7 7 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Чтобы найти в списке 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
Отслеживать
ответ дан 14 апр 2018 в 8:25
52.2k 11 11 золотых знаков 108 108 серебряных знаков 312 312 бронзовых знаков
def func(): for dictionary in example["list"]: if "Surname" in dictionary and dictionary["Surname"] == "surname5": return dictionary # assert func()["Age"] == "age5"
Отслеживать
ответ дан 13 апр 2018 в 19:00
96 1 1 серебряный знак 4 4 бронзовых знака
Видимо я чего-то не понимаю. «Инструкция assert позволяет производить проверки истинности утверждений, что может быть использовано в отладочных целях.» В данном случае, значение ключа «Age» заранее неизвестно. Задача стоит в том, чтобы либо получить индекс словаря в списке (в примере это индекс 4) и обратиться к его элементу (result = example[«list»][4][«Age»]), либо как-то сделать это минуя получение индекса.
13 апр 2018 в 19:31
В условии: [. чтобы искомый словарь можно было найти по «surname5» вне зависимости от того. ]. Словарь найден. [assert func()[«Age»] == «age5»] — это проверка, как и в условии задачи: result = example[«list»][4][«Age»] print (result) # Результат: age5
Доступ к произвольному элементу словаря в Python
Словари в Python — это мощный инструмент для хранения информации. Они позволяют хранить пары «ключ-значение» и обеспечивают быстрый доступ к значению по ключу. Однако, иногда возникает необходимость обратиться к произвольному элементу словаря, не зная заранее его ключ.
Пример проблемы
Рассмотрим следующий словарь:
mydict =
Предположим, что нужно получить значение первого элемента словаря, но ключ этого элемента заранее неизвестен. Частое решение этой проблемы выглядит так:
mydict[list(mydict.keys())[0]]
Здесь mydict.keys() — это специальный объект, который содержит все ключи словаря. Функция list() преобразует этот объект в список, а индекс [0] дает доступ к первому элементу этого списка, то есть к первому ключу словаря. Далее этот ключ используется для доступа к значению в словаре.
Улучшенное решение
В Python есть более простой и эффективный способ получить произвольный элемент словаря. Для этого можно использовать метод next() и iter() , который превращает словарь в итератор:
next(iter(mydict))
Функция iter() преобразует словарь в итератор, который представляет собой объект, по которому можно «пройтись» последовательно, то есть получить доступ к каждому его элементу по очереди. Функция next() возвращает следующий элемент итератора. Если итератор только что создан, то next() возвращает первый элемент.
Важно отметить, что порядок элементов в словаре не гарантирован, поэтому «первый» элемент в данном случае — это любой произвольный элемент словаря.
Этот способ более эффективен, потому что он не требует преобразования всего словаря в список, что может быть затратно по времени и памяти, если словарь большой.
Циклы в Python
При написании программ часто возникает потребность делать одно и то же действие для нескольких объектов. Например, сохранить 5 пользователей:
user1.save() user2.save() user3.save() user4.save() user5.save()
Кода пока не очень много, но что будет, когда пользователей будет 20? А что если нужно обработать 3 миллиона пользователей вашего сайта? Помогут циклы.
Цикл по списку
Цикл — это запуск одного и того же кода для каждого элемента в списке. Вот как выглядит пример выше с использованием списка и циклов:
users = [user1, user2, user3, user4, user5] for user in users: user.save()
Каждый элемент списка users по очереди подставится в переменную user и для него запустится код с отступом.
Что, всё ещё копипастить пользователей в список? Нет, чаще всего такое не требуется и код выглядит так:
users = get_users_from_database() # возвращает список всех пользователей for user in users: user.do_something() # работа с каждым пользователем по очереди user.save()
Снова, каждый пользователь по очереди попадёт в переменную user , у него вызовется метод .do_something() , а затем метод .save() .
Цикл по словарю
Словарь очень легко можно превратить в 2 списка:
capitals = "Russia": "Moscow", "England": "London", "China": "Beijing", "Italy": "Rome" >
Первый список — ключи словаря (первые элементы в парах):
print(capitals.keys()) # ['Russia', 'England', 'China', 'Italy']
Второй список — значения (вторые элементы в парах):
print(capitals.values()) # ['Moscow', 'London', 'Beijing', 'Rome']
По умолчанию, если передать в for словарь, он начнёт перебирать ключи:
for country in capitals: print(country) # Russia # England # China # Italy
Но так же через ключи словаря можно добраться и до значений:
for country in capitals: capital = capitals[country] print("столица <> это <>".format(country,capital)) # столица Russia это Moscow # столица England это London # столица China это Beijing # столица Italy это Rome
В Python есть ещё один способ добраться до значений словаря, использовать .items() . Этот метод превращает словарь в список кортежей:
print(capitals) # # "Russia": "Moscow", # "England": "London", # "China": "Beijing", # "Italy": "Rome" # > print(capitals.items()) # [ # ('Russia', 'Moscow'), # ('England', 'London'), # ('China', 'Beijing'), # ('Italy', 'Rome') # ]
И теперь цикл сможет итерироваться сразу по двум переменным:
for country, capital in capitals.items(): print("столица <> это <>".format(country, capital)) # столица Russia это Moscow # столица England это London # столица China это Beijing # столица Italy это Rome
Выполнить код несколько раз
Что, если нужно выполнить код заранее известное количество раз? например, сгенерировать 10 случайных чисел и вывести на экран? По какому такому списку мне перебиать элементы?
В таком случаевыручает функция range() .
Что она делает проще показать на примерах:
- range(5) — вернёт список из 5 элементов, начинаяс нуля: [0, 1, 2, 3, 4]
- range(2,10) — вернёт список из элементов от 2 до 10: [2, 3, 4, 5, 6, 7, 8, 9]
- range(2,10,3) — вернёт список из каждого третьего элемента от 2 до 10: [2, 5, 8]
Теперь, научившись генерировать списки нужной длины, можно сгенерировать 10 случайных чисел:
import random for number in range(10): print(random.randint(1,100))
В терминал выведется 10 случайных чисел от 1 до 100. Работает так же, как и ранее: range(10) — это список с числами от 0 до 9. Они по очереди подставятся в переменную number , но ни на что не повлияют, т.к. в коде «внутри for » переменная number не используется.
Строка — тоже “список”
Python запросто переводит одни типы данных в другие. Он может притвориться, что строка — это список из её символов:
text = "Девман" for letter in text: print(letter) # Д # е # в # м # а # н
Можно превратить строку в список более явно с помощью функции list() :
text = "Девман" my_list = list(text) print(my_list) # ['Д', 'е', 'в', 'м', 'а', 'н']
Что дальше
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.
Словарь в списке. Последний элемент словаря в списке
Удалить последний элемент в односвязном списке
приведите пример удаления последнего элементы в односвязном списке в интернете находил вот это .
Как удалить последний элемент в списке?
Создал односвязный линейный список.Как написать функцию для удаления последнего элемента? .
В двунаправленном списке удалить последний четный элемент
В двунаправленном списке удалить последний четный элемент. Написал удаление для первого четного.
Поменять местами первый и последний элемент в списке
Не могу понять, как создать процедуру для этого. Поможете пожалуйста с программой? Здесь часть.
В односвязном списке поменять местами 3 и последний элемент
Есть у кого пример как в односвязном списке поменять местами 3 и последний элемент ?
![]()
5416 / 3840 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
1 2 3 4
>>> namelis=[{'name': 'Bart'}, {'name': 'Lisa'}, {'name': 'Maggie'}, {'name': 'Homer'}, {'name': 'Marge'}] >>> namelis[-1]['name'] 'Marge' >>>
Регистрация: 16.12.2016
Сообщений: 149
Garry Galler, Спасибо. А если нужно вывести все элементы , кроме последнего? Через цикл
![]()
5416 / 3840 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
Сообщение от m4ksc0r 
все элементы , кроме последнего
1 2 3
>>> namelis[:-1] [{'name': 'Bart'}, {'name': 'Lisa'}, {'name': 'Maggie'}, {'name': 'Homer'}] >>>
И цикл тут не нужен.
Регистрация: 16.12.2016
Сообщений: 149
Garry Galler, а чтобы без ключей выводило?
![]()
5416 / 3840 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1

Сообщение было отмечено m4ksc0r как решение
Решение
1 2 3
>>> print(*[d['name'] for d in namelis[:-1]]) Bart Lisa Maggie Homer >>>
Регистрация: 16.12.2016
Сообщений: 149
Сообщение от Garry Galler 
print(*[d[‘name’] for d in namelis[:-1]])
это генератор?
![]()
5416 / 3840 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
Сообщение от m4ksc0r 
это генератор?
Нет. Это list comprehension — выражение создающие список.
Генератор создается круглыми скобками:
print(*(d['name'] for d in namelis[:-1]))
Если его сохранить в переменной,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
>>> g = (d['name'] for d in namelis[:-1]) то можно узнать что это такое >>> g generator object genexpr> at 0x0203EF90> >>> У него можно запрашивать элементы методом next >>> next(g) 'Bart' >>> next(g) 'Lisa' >>> next(g) 'Maggie' >>> next(g) 'Homer' >>> next(g) Traceback (most recent call last): File "", line 1, in module> next(g) StopIteration >>> Или в цикле - так удобнее. >>> g=(d['name'] for d in namelis[:-1]) >>> for name in g: print(name) Bart Lisa Maggie Homer >>>
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Метод, удаляющий последний добавленный элемент в списке
Приветствую! Мне дана задача: "Дана последовательность латинских букв, оканчивающаяся точкой.
Определить функцию, переставляющую в списке первый и последний элемент
Знакомлюсь с функциями на Python Интересно посмотреть на решение таких элементарных задачек, чтобы.

Найти в одном списке максимальный элемент, а в другом списке соответствующий ему по индексу
Здравствуйте! Помогите решить задачу — есть два cписка a = и b = . Необходимо найти из списка ‘a’.

Как поменять местами первый и последний элемент в односвязном списке?
Есть 2 класса: public class Node < private Node link; private int info; public.

В двухсвязном списке действительных чисел удалить первый и последний элемент
Здраствуйте,вот программка,первый элемент я удалил ,а как удалить последний не могу понять,вот мой.

В непустом динамическом списке последний элемент переместить в начало списка
Добрый день! Помогите пожалуйста. Ниже код,который был дан как образец в методичке и был переделан.
