Как получить максимальное значение ключа в dict?

Я хотел бы получить URL-адрес видео с максимальным разрешением.

Если бы у меня был следующий словарь, было бы проще всего получить URL-адрес видео с максимальным размером?

Лучше всего разделить размер по разделам, отформатировать число в тип int, а затем получить значение?

videos = {
        'size_476_306': 'https://www.....',
        'size_560_360': 'https://www.....',
        'size_644_414': 'https://www.....',
        'size_720_480': 'https://www.....',
}

Решено

Я не мог понять лямбду, поэтому реализовал ее по-другому.

for size, v_url in videos.items():

    max_size_info = size.split('_')
    split_size = int(max_size_info[1])
    size_array.append(split_size)
    video_array.append(v_url)

max_size = size_array.index(max(size_array))
if str(size_array[max_size]) in v_url:
    print(size,v_url)

Всегда ли размеры имеют одинаковое количество цифр (как в ваших примерах) или могут быть четырехзначные размеры, например size_1920_1080 или подобные? Если все числовые части ваших строк имеют одинаковую длину, лексикографическое сравнение строк будет соответствовать числовому сравнению, поэтому вам, вероятно, не потребуется выполнять какой-либо синтаксический анализ. Если числа могут различаться по длине, вам, вероятно, нужно выполнить синтаксический анализ.

Blckknght 23.04.2022 04:54

@Черный. Позволю себе не согласиться. Что больше, 500_100 или 499_999?

Mad Physicist 23.04.2022 05:09

Это специфичная вещь для домена. Возможно, спрашивающего интересует только одно из измерений. Все примеры имеют одинаковые соотношения сторон (первые три точно такие же), и вполне разумно ожидать этого для нескольких разных версий одного и того же видео. Если они надежно согласованы во всех их данных, и они не ожидают больших размеров с четырьмя цифрами, то наивная сортировка строк будет работать очень хорошо.

Blckknght 23.04.2022 05:27

Разрешение видео может быть меньше или больше 1000 пикселей в любом измерении. Выпекание предположения о количестве цифр кажется мне рецептом катастрофы.

Samwise 23.04.2022 05:40

Размеры меня не интересуют, мне нужно было только получить видео в максимальном разрешении, поэтому я модифицировал код. Спасибо

donbe 23.04.2022 06:02

Пожалуйста, не помещайте решение в вопрос. Вместо этого вы можете ответь на свой вопрос.

wjandrea 23.04.2022 06:05

@donbe взгляните на мой обновленный ответ для более простого подхода, чем то, что у вас здесь (и, надеюсь, более понятного, чем мой быстрый однострочник) :)

Samwise 23.04.2022 16:58
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы 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.
1
7
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Is it best to split the size by partition, format the number into an int type, and then get the value?

Да, я бы так и сделал:

>>> max(videos.items(), key=lambda i: int.__mul__(*map(int, i[0].split("_")[1:])))
('size_720_480', 'https://www.....')

Вот немного более подробная версия с именованной функцией:

>>> def get_resolution(key: str) -> int:
...     """
...     Gets the resolution (as pixel area) from 'size_width_height'.
...     e.g. get_resolution("size_720_480") -> 345600
...     """
...     _, width, height = key.split("_")
...     return int(width) * int(height)
...
>>> max(videos, key=get_resolution)
'size_720_480'

Учитывая то выражение, которое дает нам самый большой ключ, мы можем легко получить соответствующее значение:

>>> videos[max(videos, key=get_resolution)]
'https://www.....'

или мы могли бы получить пару ключ-значение, взяв максимум items(), здесь используя гораздо более простой lambda, который просто переводит key, value в get_resolution(key):

>>> max(videos.items(), key=lambda i: get_resolution(i[0]))
('size_720_480', 'https://www.....')

Слишком много логики для однострочника, имхо.

wim 23.04.2022 05:14

Представленные людьми альтернативы причиняли мне настоящую физическую боль, поэтому я сделал свою собственную, более подробную версию.

Samwise 23.04.2022 08:47

Версия без лямбды, намного лучше!

wim 23.04.2022 20:57

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