Ответ 1
Это потому, что u'9' > u'10'
, поскольку они являются строками.
Чтобы сравнить численно, используйте int
в качестве ключа.
max(MyCount, key=int)
(Вызов .keys()
обычно не нужен)
У меня есть словарь, который выглядит как
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)
.
Словарь создается динамически.
Это потому, что u'9' > u'10'
, поскольку они являются строками.
Чтобы сравнить численно, используйте int
в качестве ключа.
max(MyCount, key=int)
(Вызов .keys()
обычно не нужен)
Вам нужно сравнить фактические числовые значения. В настоящее время вы сравниваете строки лексиграфически.
max(MyCount, key=int)
max(map(int, MyCount))
Или если вы хотите, чтобы возвращаемое значение было исходной строкой:
max(MyCount, key=int)
Поскольку ваши клавиши являются строками, они сравниваются лексикографически, а "9" - это максимальное значение.
То, что вы ищете, это что-то вроде: max(int(k) for k in MyCount)
Это ваша проблема:
>>> u'10' > u'9'
False
Эффективно, вы сравниваете символы '1' и '9' здесь. Вероятно, вам нужно:
max(long(k) for k in MyCount)
или создайте словарь с цифрами как ключи (вместо строк).
Вы используете max для строковых значений. Вы должны преобразовать их в int. Попробуйте что-то вроде:
print(max([int(s) for s in MyCount.keys()]))
Или, как предложил Тим:
print(max(int(s) for s in MyCount))