Here is a quick rundown of what is offered today, using possibly silly examples.
d = deque()
d.extend(xrange(10))
while d:
print d.popleft()
What you see here is that deque acts like a list but has mirror versions of many end-modifying operations, like append, extend, and pop, which operate on the 'left' side. A list is far less efficient with insertion and popping from anywhere but the end of the list. This makes deque great for First-In-First-Out structures, where a list is more suited for a First-In-Last-Out setup.
dd = collections.defaultdict(lambda: None)
dd['a'] = 1
dd['b'] = 2
print dd['c'] or 3
Here we automatically handle a non-existant key with a default value, None. A factory callable is used, so that we can actually return different values, but we don't get the key. One interesting use is itertools.count().next as the factory, which means every missing key is automatically filled with an automatically incrementing integer.
Comments
d=defaultdict(int)
for word in words:
d[word] += 1
or to accumulate a list of first names corresponding to last names:
d=defaultdict(list)
for first, last in names:
d[last].append(first)
As for the dict.
I like to use is as follows for groups of data that are optional. self.items=collections.defaultdict(str)
I have this nice usecase in which I got a set of messages that represent a flow, with some optional. The above just lets me set non-existant message to ''.
You need a bigger trick to make the default something like MISSING, you will have to do as follows
self.items=collections.defaultdict(lambda : "MISSING")
which is a bit ugly but it works nice.