Какой самый простой способ получить самый высокий и самый низкий ключи из словаря? - PullRequest
3 голосов
/ 15 апреля 2010
self.mood_scale = {
    '-30':"Panic",
    '-20':'Fear',
    '-10':'Concern',
    '0':'Normal',
    '10':'Satisfaction',
    '20':'Happiness',
    '30':'Euphoria'}

Мне нужно установить две переменные: max_mood и min_mood, чтобы я мог установить некоторые ограничения для тикера. Какой самый простой способ получить самые низкие и самые высокие ключи?

Ответы [ 3 ]

12 голосов
/ 15 апреля 2010
>>> min(self.mood_scale, key=int)
'-30'
>>> max(self.mood_scale, key=int)
'30'
8 голосов
/ 15 апреля 2010

Это должно сделать это:

max_mood = max(self.mood_scale)
min_mood = min(self.mood_scale)

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

ОБНОВЛЕНИЕ: Я не осознавал, что ваши ключи были строками. Поскольку это звучит так, как если бы это было ошибкой, я оставлю все как есть, но учтите, что для этого требуется, чтобы ключи были действительными целыми числами.

7 голосов
/ 15 апреля 2010

Это действительный Python? Я думаю, что вы имеете в виду:

mood_scale = {
    '-30':"Panic",
    '-20':'Fear',
    '-10':'Concern',
    '0':'Normal',
    '10':'Satisfaction',
    '20':'Happiness',
    '30':'Euphoria'}

print mood_scale[str(min(map(int,mood_scale)))]
print mood_scale[str(max(map(int,mood_scale)))]

Выходы

Panic Euphoria

Гораздо лучше и быстрее, используя клавиши в качестве ключей

mood_scale = {
    -30:"Panic",
    -20:'Fear',
    -10:'Concern',
    0:'Normal',
    10:'Satisfaction',
    20:'Happiness',
    30:'Euphoria'}

print mood_scale[min(mood_scale))]
print mood_scale[max(mood_scale))]

Редактировать 2: Гораздо быстрее, используя итератор

print timeit.timeit( lambda: mood_scale[min(mood_scale.keys())])
print timeit.timeit( lambda: mood_scale[min(mood_scale)])
1.05913901329
0.662925004959

Другим решением может быть отслеживание значений max / min при вставке и просто mood_scale.min () / max ()

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