How do I retrive the top 3 list from a dictionary?
>>> d
{\'a\': 2, \'and\': 23, \'this\': 14, \'only.\': 21, \'is\': 2, \'work\': 2, \'will\': 2, \
Given the solutions above:
def most_popular(L):
# using lambda
start = datetime.datetime.now()
res=dict(sorted([(k,v) for k, v in L.items()], key=lambda x: x[1])[-2:])
delta=datetime.datetime.now()-start
print "Microtime (lambda:%d):" % len(L), str( delta.microseconds )
# using collections
start=datetime.datetime.now()
res=dict(collections.Counter(L).most_common()[:2])
delta=datetime.datetime.now()-start
print "Microtime (collections:%d):" % len(L), str( delta.microseconds )
# list of 10
most_popular({el:0 for el in list(range(10))})
# list of 100
most_popular({el:0 for el in list(range(100))})
# list of 1000
most_popular({el:0 for el in list(range(1000))})
# list of 10000
most_popular({el:0 for el in list(range(10000))})
# list of 100000
most_popular({el:0 for el in list(range(100000))})
# list of 1000000
most_popular({el:0 for el in list(range(1000000))})
Working on dataset dict of size from 10^1 to 10^6 dict of objects like
print {el:0 for el in list(range(10))}
{0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0}
we have the following benchmarks
Python 2.7.10 (default, Jul 14 2015, 19:46:27)
[GCC 4.8.2] on linux
Microtime (lambda:10): 24
Microtime (collections:10): 106
Microtime (lambda:100): 49
Microtime (collections:100): 50
Microtime (lambda:1000): 397
Microtime (collections:1000): 178
Microtime (lambda:10000): 4347
Microtime (collections:10000): 2782
Microtime (lambda:100000): 55738
Microtime (collections:100000): 26546
Microtime (lambda:1000000): 798612
Microtime (collections:1000000): 361970
=> None
So we can say that for small lists use lambda, but for huge list, collections has better performances.
See the benchmark running here.