Sorting a numbered table of contents and the contents associated with it
Just a performance tip. The function section_sort is called multiples times and you are compiling the RegEx each time. Also you are using section.split() twice in the function to get the same value. You can save these values in vars. The code would be like this:

from collections import OrderedDict
import re

headers = ['4.2.10 Context 4', '4.2.11 Context 5', '4.2.0 Context 1', '4.2.1 Context 2', '4.2.2 Context 3']
sections = ['C4', 'C5', 'C1', 'C2', 'C3']
numbering_pattern = re.compile('\d.\d[.\d]*')

def section_sort(t):
    section = t[0]

    snbr = section.split(' ')[0]
    if numbering_pattern.match(snbr):
        return [int(_) for _ in s_nbr.split('.')]

contents = OrderedDict(sorted(zip(headers, sections), key=section_sort))

for k, v in contents.items():
    print('{header}\n\t{section}'.format(header=k, section=v))