Подтвердить что ты не робот

Получить максимальный ключ в словаре

У меня есть словарь, который выглядит как

MyCount= {u'10': 1, u'1': 2, u'3': 2, u'2': 2, u'5': 2, u'4': 2, u'7': 2, u'6': 2, u'9': 2, u'8': 2}

Мне нужен старший ключ, который равен 10, но если try max(MyCount.keys()), он дает 9 как наивысший.
То же самое для max(MyCount).

Словарь создается динамически.

4b9b3361

Ответ 1

Это потому, что u'9' > u'10', поскольку они являются строками.

Чтобы сравнить численно, используйте int в качестве ключа.

max(MyCount, key=int)

(Вызов .keys() обычно не нужен)

Ответ 2

Вам нужно сравнить фактические числовые значения. В настоящее время вы сравниваете строки лексиграфически.

max(MyCount, key=int)

Ответ 3

max(map(int, MyCount))

Или если вы хотите, чтобы возвращаемое значение было исходной строкой:

max(MyCount, key=int)

Ответ 4

Поскольку ваши клавиши являются строками, они сравниваются лексикографически, а "9" - это максимальное значение.

То, что вы ищете, это что-то вроде: max(int(k) for k in MyCount)

Ответ 5

Это ваша проблема:

>>> u'10' > u'9'
False

Эффективно, вы сравниваете символы '1' и '9' здесь. Вероятно, вам нужно:

max(long(k) for k in MyCount)

или создайте словарь с цифрами как ключи (вместо строк).

Ответ 6

Вы используете max для строковых значений. Вы должны преобразовать их в int. Попробуйте что-то вроде:

print(max([int(s) for s in MyCount.keys()]))

Или, как предложил Тим:

print(max(int(s) for s in MyCount))