Как найти предыдущий элемент в упорядоченном словаре, который имеет просматриваемое значение

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

def get_previous_hour(od: OrderedDict, value: str, hour: int):
    pass

Например, для этого ввода:

od=Ordereddict({1:"ala", 2:"a", 3:"a", 4: "dog",5:"a" })
hour=3
value="a"

он должен вернуть 2, потому что это был последний раз перед 3, когда "а" было значением.

Для этого ввода

od=Ordereddict({1:"ala", 2:"a", 3:"a", 4: "dog",5:"a" })
hour=5
value="a"

он должен вернуть 3. И для этого ввода:

od=Ordereddict({1:"ala", 2:"a", 3:"a", 4: "dog",5:"a" })
hour=5
value="dog"

он должен вернуть 4. Это первый раз, когда я использую упорядоченные диктовки.

Пожалуйста, обновите свой вопрос с кодом, который вы пробовали.

quamrana 09.04.2022 12:40
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
1
24
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете сделать это с помощью deque следующим образом:

from collections import OrderedDict, deque

od = OrderedDict({1:"ala", 2:"a", 3:"a", 4: "dog",5:"a" })
dq = deque([None, None], maxlen=2)
hour = 3
value = 'a'
for k, v in od.items():
    if k > hour:
        break
    if v == value:
        dq.append(k)
print(dq[0] or dq[1])

Выход:

2
Ответ принят как подходящий

Пытаться:

hour = 5
value = "a"

prev_k = next(k for k, v in reversed(od.items()) if k < hour and v == value)
print(prev_k)

Отпечатки:

3

Спасибо, а как вернуть 0, если такого k нет?

Ryszard Eggink 09.04.2022 13:26

Попробуйте, кроме ошибки StopIteration это хорошее решение?

Ryszard Eggink 09.04.2022 13:32

@RyszardEggink Вы можете использовать try: except: или prev_k = next((k for k, v in reversed(od.items()) if k < hour and v == value), None) — это вернет None, если ключ не найден.

Andrej Kesely 09.04.2022 14:04

Другие вопросы по теме