Формальный говнокод для решения проблемы буквы Ё (концепт):
key = lambda c: ord('Е') + 0.5 if c == 'Ё' else ord(c)
Правильный путь:
import locale
from functools import cmp_to_key
from collections import OrderedDict
locale.setlocale(locale.LC_ALL, 'Russian_Russia.1251')
a = [{'src': 'Яблоко', 'dst': 2343}, {'src': 'Ананас', 'dst': 323}, {'src': 'Ёжик', 'dst': 3223}]
# Чтобы не вызывать связку cmp_to_key(locale.strcoll) в sorted() многократно
def keyfunc(item, func=cmp_to_key(locale.strcoll)):
return func(item[0])
d = OrderedDict(sorted(((e['src'], e['dst']) for e in a), key=keyfunc))
Если всё же требуется именно список словарей:
# Чтобы не вызывать связку cmp_to_key(locale.strcoll) в sorted() многократно
def keyfunc(item, func=cmp_to_key(locale.strcoll)):
return func(item['src'])
sorted(a, key=keyfunc)
Но самое адекватное решение будет таким (для работы: pip install sortedcontainers):
from sortedcontainers import SortedDict
d = SortedDict(cmp_to_key(locale.strcoll), {e['src']:e['dst'] for e in a})
Примечания:
1. Если можете использовать последнюю версию Python, то начиная с версии 3.6 порядок элементов в словаре не меняется, то есть его можно создать сразу сортированным и работать без опасений.
2. Модуль sortedcontainers по быстродействию и удобству оставляет позади все существующие альтернативные библиотеки, включая стандартную collections. Очень рекомендую.