Python диктует достижение функции Java JavaKow (), чтобы найти значение? - PullRequest
0 голосов
/ 27 июня 2018

Вот этот дикт level = {1.4:'A',2.5:'B',3.5:'C'}

Я хочу сопоставить score = 1.6 с level и вернуть значение 'B'; он возвращает значение ключа, которое больше score, но наименьшее.

В Java я делаю это с помощью функции:

level.get(level.higherKey(score));

Но что делать в python? Я полагаю, что Python мог бы сделать это элегантно.

Ответы [ 4 ]

0 голосов
/ 27 июня 2018

Как насчет использования упорядоченного словаря для возврата следующего большего значения?

def higherKey(level, value):
    for elem in collections.OrderedDict(sorted(level.items(), key=lambda t: t)):
        if elem > value:
            return level[elem]
0 голосов
/ 27 июня 2018

Я думаю, вам нужно это:

level = {1.4: 'A', 2.5: 'B', 3.5: 'C'}
score = 1.6

print(level.get(min((k for k in level if score <= k), default=None)))    
# B

Использование min в выражении генератора гарантирует, что оно возвращает наименьший ключ, который больше score.

0 голосов
/ 27 июня 2018
print(level[min([i for i in level.keys() if i > score])])
0 голосов
/ 27 июня 2018
try:
    print(level[min(filter(lambda x: x > score, level))])
except ValueError:
    print("No match")

Это печатает значение минимального ключа больше score. Если его нет, выводится «Нет совпадений».

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