Получить ключ, соответствующий минимальному значению в словаре - PullRequest
240 голосов
/ 19 июля 2010

Если у меня есть словарь Python, как мне получить ключ к записи, которая содержит минимальное значение?

Я думал о том, что делать с функцией min() ...

С учетом ввода:

{320:1, 321:0, 322:3}

Будет возвращено 321.

Ответы [ 15 ]

1 голос
/ 09 января 2018

Я сравнил, как работают следующие три варианта:

    import random, datetime

myDict = {}
for i in range( 10000000 ):
    myDict[ i ] = random.randint( 0, 10000000 )



# OPTION 1

start = datetime.datetime.now()

sorted = []
for i in myDict:
    sorted.append( ( i, myDict[ i ] ) )
sorted.sort( key = lambda x: x[1] )
print( sorted[0][0] )

end = datetime.datetime.now()
print( end - start )



# OPTION 2

start = datetime.datetime.now()

myDict_values = list( myDict.values() )
myDict_keys = list( myDict.keys() )
min_value = min( myDict_values )
print( myDict_keys[ myDict_values.index( min_value ) ] )

end = datetime.datetime.now()
print( end - start )



# OPTION 3

start = datetime.datetime.now()

print( min( myDict, key=myDict.get ) )

end = datetime.datetime.now()
print( end - start )

Пример вывода:

#option 1
236230
0:00:14.136808

#option 2
236230
0:00:00.458026

#option 3
236230
0:00:00.824048
1 голос
/ 06 декабря 2016
d={}
d[320]=1
d[321]=0
d[322]=3
value = min(d.values())
for k in d.keys(): 
    if d[k] == value:
        print k,d[k]
0 голосов
/ 27 апреля 2018

Для создания класса, который можно заказать, необходимо переопределить 6 специальных функций, чтобы он вызывался функцией min ()

. Эти методы __lt__ , __le__, __gt__, __ge__, __eq__ , __ne__, если они меньше, меньше илиравно, больше, больше или равно, равно, не равно.например, вы должны реализовать __lt__ следующим образом:

def __lt__(self, other):
  return self.comparable_value < other.comparable_value

, тогда вы можете использовать функцию min следующим образом:

minValue = min(yourList, key=(lambda k: yourList[k]))

это сработало для меня.

0 голосов
/ 19 июля 2010
# python 
d={320:1, 321:0, 322:3}
reduce(lambda x,y: x if d[x]<=d[y] else y, d.iterkeys())
  321
0 голосов
/ 19 июля 2010

Это то, что вы ищете?

d = dict()
d[15.0]='fifteen'
d[14.0]='fourteen'
d[14.5]='fourteenandhalf'

print d[min(d.keys())]

Печать "четырнадцать"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...