import re
def natural_key(astr):
"""See http://w...content-available-to-author-only...r.com/blog/archives/001018.html"""
return [int(s) if re.match(r'\d+$', s)else s for s in re.split(r'(\d+)', astr)]
a = [{'cavity' : '11A', 'ltg_nr' : 'Ltgnr11A'},
{'cavity' : '20', 'ltg_nr' : 'Ltgnr20'},
{'cavity' : '10', 'ltg_nr' : 'Ltgnr10'},
{'cavity' : '17B', 'ltg_nr' : 'Ltgnr17B'},
{'cavity' : '1K', 'ltg_nr' : 'Ltgnr1K'},
{'cavity' : '11A', 'ltg_nr' : 'Ltgnr11A'},
{'cavity' : '11A', 'ltg_nr' : 'Ltgnr11A'},
{'cavity' : '22', 'ltg_nr' : 'Ltgnr22'},
{'cavity' : '21A', 'ltg_nr' : 'Ltgnr21A'},
{'cavity' : '21C', 'ltg_nr' : 'Ltgnr21C'},
{'cavity' : '21B', 'ltg_nr' : 'Ltgnr170'},
{'cavity' : '101', 'ltg_nr' : 'Ltgnr170'},
{'cavity' : '22AA', 'ltg_nr' : 'Ltgnr170'},
{'cavity' : '100A', 'ltg_nr' : 'Ltgnr170'}]
import pprint
pprint.pprint(sorted(a, key=lambda d: natural_key(d['cavity'])))
aW1wb3J0IHJlCmRlZiBuYXR1cmFsX2tleShhc3RyKToKICAgICAgICAiIiJTZWUgaHR0cDovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnIuY29tL2Jsb2cvYXJjaGl2ZXMvMDAxMDE4Lmh0bWwiIiIKICAgICAgICByZXR1cm4gW2ludChzKSBpZiByZS5tYXRjaChyJ1xkKyQnLCBzKWVsc2UgcyBmb3IgcyBpbiByZS5zcGxpdChyJyhcZCspJywgYXN0cildCgoKYSA9IFt7J2Nhdml0eScgOiAnMTFBJywgJ2x0Z19ucicgOiAnTHRnbnIxMUEnfSwKICAgICAgICB7J2Nhdml0eScgOiAnMjAnLCAnbHRnX25yJyA6ICdMdGducjIwJ30sCiAgICAgICAgeydjYXZpdHknIDogJzEwJywgJ2x0Z19ucicgOiAnTHRnbnIxMCd9LAogICAgICAgIHsnY2F2aXR5JyA6ICcxN0InLCAnbHRnX25yJyA6ICdMdGducjE3Qid9LAogICAgICAgIHsnY2F2aXR5JyA6ICcxSycsICdsdGdfbnInIDogJ0x0Z25yMUsnfSwKICAgICAgICB7J2Nhdml0eScgOiAnMTFBJywgJ2x0Z19ucicgOiAnTHRnbnIxMUEnfSwKICAgICAgICB7J2Nhdml0eScgOiAnMTFBJywgJ2x0Z19ucicgOiAnTHRnbnIxMUEnfSwKICAgICAgICB7J2Nhdml0eScgOiAnMjInLCAnbHRnX25yJyA6ICdMdGducjIyJ30sCiAgICAgICAgeydjYXZpdHknIDogJzIxQScsICdsdGdfbnInIDogJ0x0Z25yMjFBJ30sCiAgICAgICAgeydjYXZpdHknIDogJzIxQycsICdsdGdfbnInIDogJ0x0Z25yMjFDJ30sCiAgICAgICAgeydjYXZpdHknIDogJzIxQicsICdsdGdfbnInIDogJ0x0Z25yMTcwJ30sCiAgICAgICAgeydjYXZpdHknIDogJzEwMScsICdsdGdfbnInIDogJ0x0Z25yMTcwJ30sCiAgICAgICAgeydjYXZpdHknIDogJzIyQUEnLCAnbHRnX25yJyA6ICdMdGducjE3MCd9LAogICAgICAgIHsnY2F2aXR5JyA6ICcxMDBBJywgJ2x0Z19ucicgOiAnTHRnbnIxNzAnfV0KCmltcG9ydCBwcHJpbnQKcHByaW50LnBwcmludChzb3J0ZWQoYSwga2V5PWxhbWJkYSBkOiBuYXR1cmFsX2tleShkWydjYXZpdHknXSkpKQo=
[{'cavity': '1K', 'ltg_nr': 'Ltgnr1K'},
{'cavity': '10', 'ltg_nr': 'Ltgnr10'},
{'cavity': '11A', 'ltg_nr': 'Ltgnr11A'},
{'cavity': '11A', 'ltg_nr': 'Ltgnr11A'},
{'cavity': '11A', 'ltg_nr': 'Ltgnr11A'},
{'cavity': '17B', 'ltg_nr': 'Ltgnr17B'},
{'cavity': '20', 'ltg_nr': 'Ltgnr20'},
{'cavity': '21A', 'ltg_nr': 'Ltgnr21A'},
{'cavity': '21B', 'ltg_nr': 'Ltgnr170'},
{'cavity': '21C', 'ltg_nr': 'Ltgnr21C'},
{'cavity': '22', 'ltg_nr': 'Ltgnr22'},
{'cavity': '22AA', 'ltg_nr': 'Ltgnr170'},
{'cavity': '100A', 'ltg_nr': 'Ltgnr170'},
{'cavity': '101', 'ltg_nr': 'Ltgnr170'}]