deque :
>>> from collections import deque>>> d = deque('ghi') # make a new deque with three items>>> for elem in d: # iterate over the deque's elements... print elem.upper()GHI>>> d.append('j') # add a new entry to the right side>>> d.appendleft('f') # add a new entry to the left side>>> d # show the representation of the dequedeque(['f', 'g', 'h', 'i', 'j'])>>> d.pop() # return and remove the rightmost item'j'>>> d.popleft() # return and remove the leftmost item'f'>>> list(d) # list the contents of the deque['g', 'h', 'i']>>> d[0] # peek at leftmost item'g'>>> d[-1] # peek at rightmost item'i'>>> list(reversed(d)) # list the contents of a deque in reverse['i', 'h', 'g']>>> 'h' in d # search the dequeTrue>>> d.extend('jkl') # add multiple elements at once>>> ddeque(['g', 'h', 'i', 'j', 'k', 'l'])>>> d.rotate(1) # right rotation>>> ddeque(['l', 'g', 'h', 'i', 'j', 'k'])>>> d.rotate(-1) # left rotation>>> ddeque(['g', 'h', 'i', 'j', 'k', 'l'])>>> deque(reversed(d)) # make a new deque in reverse orderdeque(['l', 'k', 'j', 'i', 'h', 'g'])>>> d.clear() # empty the deque>>> d.pop() # cannot pop from an empty dequeTraceback (most recent call last): File "<pyshell#6>", line 1, in -toplevel- d.pop()IndexError: pop from an empty deque>>> d.extendleft('abc') # extendleft() reverses the input order>>> ddeque(['c', 'b', 'a'])
defaultdict :
>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]>>> d = defaultdict(list)>>> for k, v in s:... d[k].append(v)...>>> d.items()[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
>>> d = {}>>> for k, v in s:... d.setdefault(k, []).append(v)...>>> d.items()[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
>>> s = 'mississippi'>>> d = defaultdict(int)>>> for k in s:... d[k] += 1...>>> d.items()[('i', 4), ('p', 2), ('s', 4), ('m', 1)]
>>> s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]>>> d = defaultdict(set)>>> for k, v in s:... d[k].add(v)...>>> d.items()[('blue', set([2, 4])), ('red', set([1, 3]))]
namedtuple:
from collections import namedtuple
websites = [
('Sohu', 'http://www.google.com/', u'张朝阳'),
('Sina', 'http://www.sina.com.cn/', u'王志东'),
('163', 'http://www.163.com/', u'丁磊')
]
Website = namedtuple('Website', ['name', 'url', 'founder'])
for website in websites:
website = Website._make(website)
print website
# Result:
Website(name='Sohu', url='http://www.google.com/', founder=u'\u5f20\u671d\u9633')
Website(name='Sina', url='http://www.sina.com.cn/', founder=u'\u738b\u5fd7\u4e1c')
Website(name='163', url='http://www.163.com/', founder=u'\u4e01\u78ca')
OrderedDict:
>>> # regular unsorted dictionary>>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}>>> # dictionary sorted by key>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])>>> # dictionary sorted by value>>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])>>> # dictionary sorted by length of the key string>>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])
Counter
>>> # Tally occurrences of words in a list>>> cnt = Counter()>>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:... cnt[word] += 1>>> cntCounter({'blue': 3, 'red': 2, 'green': 1})
>>> c = Counter(['eggs', 'ham'])>>> c['bacon'] # count of a missing element is zero0
>>> c['sausage'] = 0 # counter entry with a zero count>>> del c['sausage']
>>> c = Counter(a=4, b=2, c=0, d=-2)>>> list(c.elements())['a', 'a', 'a', 'a', 'b', 'b']
>>> Counter('abracadabra').most_common(3)[('a', 5), ('r', 2), ('b', 2)]
>>> c = Counter(a=4, b=2, c=0, d=-2)>>> d = Counter(a=1, b=2, c=3, d=4)>>> c.subtract(d)>>> cCounter({'a': 3, 'b': 0, 'c': -3, 'd': -6})
>>> c = Counter(a=3, b=1)>>> d = Counter(a=1, b=2)>>> c + d # add two counters together: c[x] + d[x]Counter({'a': 4, 'b': 3})>>> c - d # subtract (keeping only positive counts)Counter({'a': 2})>>> c & d # intersection: min(c[x], d[x])Counter({'a': 1, 'b': 1})>>> c | d # union: max(c[x], d[x])Counter({'a': 3, 'b': 2})
1 0