Эффективный способ найти самый большой ключ в словаре с ненулевым значением

Можно практиковать SQL здесь .

6
задан SilentGhost 12 October 2009 в 18:38
поделиться

4 ответа

Что-то вроде этого должно быть достаточно быстрым:

>>> x = {0: 5, 1: 7, 2: 0}
>>> max(k for k, v in x.iteritems() if v != 0)
1

(удаление ! = 0 будет еще немного быстрее, но несколько скрывает смысл.)

13
ответ дан 8 December 2019 в 04:53
поделиться

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

max(x.iterkeys())

Чтобы отфильтровать те, где значение равно 0, вы можете использовать выражение генератора :

(k for k, v in x.iteritems() if v != 0)

Вы можете комбинировать их, чтобы получить то, что вы есть ищем (поскольку max принимает только один аргумент, скобки вокруг выражения генератора можно опустить):

max(k for k, v in x.iteritems() if v != 0)
10
ответ дан 8 December 2019 в 04:53
поделиться

Функция Python max принимает параметр key = для функции «измерения».

data = {1: 25, 0: 75}
def keymeasure(key):
    return data[key] and key

print max(data, key=keymeasure)

Использование встроенной лямбды для того же эффекта и такой же привязки локальных переменных:

print max(data, key=(lambda k: data[k] and k))

последняя альтернатива для привязки локальной переменной к анонимной ключевой функции

print max(data, key=(lambda k, mapping=data: mapping[k] and k))
1
ответ дан 8 December 2019 в 04:53
поделиться

Если бы я был на вашем месте и скорость была бы большой проблемой, я бы, вероятно, создал новый класс контейнера "DictMax", который отслеживал бы его самые большие элементы с ненулевым значением, имея внутренний стек индексов, где верхний элемент стека всегда является ключом самого большого элемента в словаре. Таким образом вы всегда будете получать самый большой элемент в постоянное время.

0
ответ дан 8 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: