Вам не нужно сортировать dict, вам нужно отсортировать все значения, которые являются списками внутри вашего dict.Вам вообще не нужно создавать какие-либо новые объекты:
a= {'a':1, 'b': [2,8,4,3], 'c':['c',5,7,'a',6]} # changed c and a to be strings
for e in a:
if isinstance(a[e],list):
a[e].sort() # inplace sort the lists
print(a)
Вывод:
{'a': 1, 'c': [5, 6, 7, 'a', 'c'], 'b': [2, 3, 4, 8]}
Это не создает новых диктовок и не создает новых списков - оно просто сортирует списокна месте.Вы не можете получить намного быстрее / меньше вычислительных ресурсов, чем это, если у вас нет специальных знаний о списках, которые сделали бы программирование специализированным сортировщиком по месту в качестве замены для list.sort ().
Вкл.Сравнение Python 3 (спасибо @Matthias Profil ) между int ansd str дает TypeError - вы можете «исправить» это с помощью некоторых необязательных вычислений (вдохновленных ответами по адресу: python-list-sort-query-when-list-содержит-разные-типы-элементов ):
def IsString(item):
return isinstance(item,str)
def IsInt(item):
return isinstance(item,int)
a= {'a':1, 'b': [2,8,4,3], 'c':['c',5,7,'a',6]} # changed c and a to be strings
for e in a:
if isinstance(a[e],list):
try:
a[e].sort() # inplace sort the lists
except TypeError:
str_list = sorted(filter(IsString,a[e]))
int_list = sorted(filter(IsInt,a[e]))
a[e] = int_list + str_list # default to numbers before strings
print(a)