fork download
  1. import re
  2. def natural_key(astr):
  3. """See http://w...content-available-to-author-only...r.com/blog/archives/001018.html"""
  4. return [int(s) if re.match(r'\d+$', s)else s for s in re.split(r'(\d+)', astr)]
  5.  
  6.  
  7. a = [{'cavity' : '11A', 'ltg_nr' : 'Ltgnr11A'},
  8. {'cavity' : '20', 'ltg_nr' : 'Ltgnr20'},
  9. {'cavity' : '10', 'ltg_nr' : 'Ltgnr10'},
  10. {'cavity' : '17B', 'ltg_nr' : 'Ltgnr17B'},
  11. {'cavity' : '1K', 'ltg_nr' : 'Ltgnr1K'},
  12. {'cavity' : '11A', 'ltg_nr' : 'Ltgnr11A'},
  13. {'cavity' : '11A', 'ltg_nr' : 'Ltgnr11A'},
  14. {'cavity' : '22', 'ltg_nr' : 'Ltgnr22'},
  15. {'cavity' : '21A', 'ltg_nr' : 'Ltgnr21A'},
  16. {'cavity' : '21C', 'ltg_nr' : 'Ltgnr21C'},
  17. {'cavity' : '21B', 'ltg_nr' : 'Ltgnr170'},
  18. {'cavity' : '101', 'ltg_nr' : 'Ltgnr170'},
  19. {'cavity' : '22AA', 'ltg_nr' : 'Ltgnr170'},
  20. {'cavity' : '100A', 'ltg_nr' : 'Ltgnr170'}]
  21.  
  22. import pprint
  23. pprint.pprint(sorted(a, key=lambda d: natural_key(d['cavity'])))
  24.  
Success #stdin #stdout 0.1s 10840KB
stdin
Standard input is empty
stdout
[{'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'}]