@Shpindel_t_800

Как вывести словарь по ключу в списке словарей?

Попалась интересная задача. Генерирутеся последовательность с определенным шагом , а конкретно шаг может быть 1, 2, 3. Шаг для каждой итерации вычисляется по такой формуле:
step_size = math.floor(random.random() * 3) + 1
#ну здесь и видно как раз что он может принимать значения 1, 2, 3

Пример такой сгенерированной последовательности: 0, 1, 3, 4, 7, 9, 10. Как видите шаг всегда разный, но не превышает 3. Для каждого элемента последовательности формируется словарь где ключем выступает сам элемент последовательности, и присваивается значение. И затем этот словарь добавляется в список.
#для последовательности 0, 1, 3, 4, 7, 9, 10 формируется список словарей
[{0 :  'какое-то значение'}, 
{1 :  'какое-то значение'}, 
{3 :  'какое-то значение'}, 
{4 :  'какое-то значение'}, 
{7 :  'какое-то значение'}, 
{9 :  'какое-то значение'}, 
{10 :  'какое-то значение'}, ]

Нужно написать функцию которая будет искать в списке словарей словарь с заданным ключем. Тоесть ввожу например 3 и функция должна вытянуть из списка словарь с ключем 3 (из примера выше).При всем этом за приемлемое время. Как я понял методом перебора самый худший вариант. Потому что словарей может быть и 100к и 200к и миллион. Ни в коем случае не прошу за меня решить, хотелось бы узнать в каком направлении читать и искать. Я правильно понимаю что тут нужно применить мат ожидание и дисперсию? И копать в направлении статистики и тер вера?

Из своих наблюдений: Делю поступающее на вход число на 2, и получаю примерный индекс нужного словаря. Условно если нужный мне индекс это 100 то получаю 95, и получается мне уже нужно проитерироваться от 96 элемента, что намного быстрее. Но если словарей больше 100 тыщ или 200 тыщ то и разброс увеличивается вот в этом и загвоздка
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
@Ragnarok-039
Мне кажется Вам подойдет что-то такое:

from collections import ChainMap

now = [{0 :  'какое-то значение'}, 
{1 :  'какое-то значение1'}, 
{3 :  'какое-то значение'}, 
{4 :  'какое-то значение'}, 
{7 :  'какое-то значение'}, 
{9 :  'какое-то значение'}, 
{10 :  'какое-то значение'}]

d = dict(ChainMap(*now))
print(d[1])
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы