min () on collections.defaultdict () возвращает максимальное количество

При использовании min() для объекта defaultdict он странно возвращает максимум, если используется для индексов подсчета диктовки строки.

Например:

 >>> import collections >>> defaultdict=collections.defaultdict >>> x=defaultdict(int) >>> string="lol I am a lol noob" >>> for k in string: x[k]+=1 >>> x defaultdict(<type 'int'>, {'a': 2, ' ': 5, 'b': 1, 'I': 1, 'm': 1, 'l': 4, 'o': 4, 'n': 1}) >>> min(x.items()) (' ', 5) 

items() возвращает элементы как (key, value) кортежей. Это означает, что когда их сравнивают с min (или чем-либо еще), их сравнивают сначала с помощью ключа, а затем по значению. Поскольку ' ' – это минимальная строка (т. Е. ' ' < 'a' , ' ' < 'b' и т. Д.), Это то, что возвращается.

Вы должны указать min, чтобы использовать второй элемент кортежа в качестве ключа сравнения. Сделайте min(x.items(), key=lambda a: a[1]) .