Operator module
Itemgetter
Section titled “Itemgetter”Grouping the key-value pairs of a dictionary by the value with itemgetter:
from itertools import groupbyfrom operator import itemgetteradict = {'a': 1, 'b': 5, 'c': 1}
dict((i, dict(v)) for i, v in groupby(adict.items(), itemgetter(1)))# Output: {1: {'a': 1, 'c': 1}, 5: {'b': 5}}which is equivalent (but faster) to a lambda function like this:
dict((i, dict(v)) for i, v in groupby(adict.items(), lambda x: x[1]))Or sorting a list of tuples by the second element first the first element as secondary:
alist_of_tuples = [(5,2), (1,3), (2,2)]sorted(alist_of_tuples, key=itemgetter(1,0))# Output: [(2, 2), (5, 2), (1, 3)]Operators as alternative to an infix operator
Section titled “Operators as alternative to an infix operator”For every infix operator, e.g. + there is a operator-function (operator.add for +):
1 + 1# Output: 2from operator import addadd(1, 1)# Output: 2even though the main documentation states that for the arithmetic operators only numerical input is allowed it is possible:
from operator import mulmul('a', 10)# Output: 'aaaaaaaaaa'mul([3], 3)# Output: [3, 3, 3]See also: mapping from operation to operator function in the official Python documentation.
Methodcaller
Section titled “Methodcaller”Instead of this lambda-function that calls the method explicitly:
alist = ['wolf', 'sheep', 'duck']list(filter(lambda x: x.startswith('d'), alist)) # Keep only elements that start with 'd'# Output: ['duck']one could use a operator-function that does the same:
from operator import methodcallerlist(filter(methodcaller('startswith', 'd'), alist)) # Does the same but is faster.# Output: ['duck']