Как построить словарь, который я хочу отсортировать по значениям?

avatar
LeLuc
8 августа 2021 в 19:26
34
1
1

У меня есть следующий словарь, model_dict:

zip_iterator = zip(classifier_names, model_scores) 
model_dict = dict(zip_iterator)

model_dict

{'AdaBoostClassifier()': 0.8101063257934118,
 'DecisionTreeClassifier()': 0.7317264413290904,
 'GradientBoostingClassifier()': 0.8080247842665061,
 'KNeighborsClassifier()': 0.7572879934634902,
 'RandomForestClassifier()': 0.7962904231530059,
 'SVC()': 0.8025361228175797}

Как я могу построить этот словарь, показывающий алгоритм по оси x и оценку по оси y, идущую от низшей к высшей в соответствии с оценкой и имеющую x-метки в качестве соответствующего алгоритма?

Обзор должен выглядеть примерно так, но с алгоритмами, отсортированными от низшего к высшему:

enter image description here

Я использую следующий очень простой код для создания графика:

plt.plot(classifier_names, model_scores)
plt.xlabel('Classifier Algorithms')
plt.xticks(classifier_names, rotation=45) 
plt.ylabel('Cross-Validated Accuracy')
Источник

Ответы (1)

avatar
Kieran Wood
8 августа 2021 в 19:34
1

Для сортировки в порядке убывания (сначала самые большие):

sorted_dict_descending = dict(sorted(model_dict.items(),key=lambda x:x[1], reverse=True))

Для сортировки в порядке возрастания (наименьшие сначала):

sorted_dict_ascending = dict(sorted(model_dict.items(),key=lambda x:x[1]))

Кажется, я не могу пометить как дубликат, но другой ответ можно найти здесь. С однострочным пониманием в порядке убывания (сначала наибольший):

sorted_dict = {k: v for k, v in sorted(model_dict.items(), key=lambda item: item[1], reverse=True)}

и с однострочным пониманием в порядке возрастания (сначала наименьший):

sorted_dict = {k: v for k, v in sorted(model_dict.items(), key=lambda item: item[1])}