2012-06-05 2 views

ответ

8

Альтернатива, которая так же быстро, как решение @ jamylak-х и более вещий:

from itertools import imap 
max(imap(len, d)) 

Смотрите сравнения:

$ python -m timeit -s "d = {'group 1': 1, 'group 1000': 0}" "len(max(d,key=len))" 
1000000 loops, best of 3: 0.538 usec per loop 

$ python -m timeit -s "d = {'group 1': 1, 'group 1000': 0}" "max(len(x) for x in d)" 
1000000 loops, best of 3: 0.7 usec per loop 

$ python -m timeit -s "d = {'group 1': 1, 'group 1000': 0}; from itertools import imap" \ 
    "max(imap(len, d))" 
1000000 loops, best of 3: 0.557 usec per loop 
+2

+1 Я согласен, что путь - это путь. Примечание для пользователей python 3: 'map' is' imap' в Python 3. – jamylak

+0

Я не могу найти документацию для imap в itertools. Является ли эта информация устаревшей? – beruic

8
>>> d = {'group 1': 1, 'group 1000': 0} 
>>> len(max(d, key=len)) 
10 

Это решение является самым быстрым, но я предпочитаю решения от @eumiro и @ ms4py, так как они не повторяют функции len два раза и более питоничны.

10
>>> max(len(x) for x in d) 

или

>>> max(map(len, d)) 
+1

@jamylak - и то, и другое медленнее для вашего двухэлементного словаря, чем ваше решение ... – eumiro

+1

@jamylak Ваше решение быстрее. – Gandaro

+0

@eumiro Хорошо, тогда я оставлю это здесь, но это лучший ответ. – jamylak