Чтобы получить максимальный ключ / значение словаря stats
:
stats = {'a':1000, 'b':3000, 'c': 100}
>>> max(stats.items(), key = lambda x: x[0])
('c', 100)
>>> max(stats.items(), key = lambda x: x[1])
('b', 3000)
Конечно, если вы хотите получить только ключ или значение из результата, вы можете используйте индексирование кортежей. Например, чтобы получить ключ, соответствующий максимальному значению:
>>> max(stats.items(), key = lambda x: x[1])[0]
'b'
Объяснение
Метод словаря items()
в Python 3 возвращает объект view словаря. Когда этот объект представления итерируется, функцией max
, он выводит словарные элементы как кортежи формы (key, value)
.
>>> list(stats.items())
[('c', 100), ('b', 3000), ('a', 1000)]
Когда вы используете lambda
выражение lambda x: x[1]
, на каждой итерации x
является одним из этих наборов (key, value)
. Таким образом, выбрав правильный индекс, вы выбираете, хотите ли вы сравнивать по ключам или значениям.
Python 2
Для релизов Python 2.2+ будет работать тот же код. Однако лучше использовать словарь iteritems()
вместо items()
.
Примечания
Поскольку OP упоминает о raw_input, это означает, что он хочет решение cli. Linux: curses - это то, что вы хотите (windows PDCurses). Curses, является графическим API-интерфейсом для программного обеспечения cli, вы можете добиться большего, чем просто обнаружить ключевые события.
Этот код будет обнаруживать клавиши до тех пор, пока не будет нажата новая строка.
import curses
def main(win):
win.nodelay(True)
key=""
win.clear()
win.addstr("Detected key:")
while 1:
try:
key = win.getkey()
win.clear()
win.addstr("Detected key:")
win.addstr(str(key))
if key == os.linesep:
break
except Exception as e:
# No input
pass
curses.wrapper(main)
Было бы трудно использовать tKinter или какой-либо другой графический интерфейс (например, wxPython или pyQT) для реализации прослушивателя или другого интерфейса для обнаружения нажатия клавиши.
Проверить эту тему .
Я предлагаю вам использовать PyGame и добавить дескриптор события.
Для Windows вы можете использовать msvcrt
следующим образом:
import msvcrt
while True:
if msvcrt.kbhit():
key = msvcrt.getch()
print(key) # just to show the result
Используйте PyGame, чтобы иметь окно, а затем вы можете получить ключевые события.
Для буквы p
:
import pygame, sys
import pygame.locals
pygame.init()
BLACK = (0,0,0)
WIDTH = 1280
HEIGHT = 1024
windowSurface = pygame.display.set_mode((WIDTH, HEIGHT), 0, 32)
windowSurface.fill(BLACK)
while True:
for event in pygame.event.get():
if event.key == pygame.K_p:
#Do what you want to here
pass
if event.type == pygame.locals.QUIT:
pygame.quit()
sys.exit()
termios
и так далее ... – Hugh Perkins 4 May 2016 в 10:40import os
, чтобы иметь возможность выйти из примера. – malte 4 August 2017 в 21:17