Чтобы лучше понять вашу проблему, я указываю вариант использования, это:
- Вы хотите отсортировать словарь на основе среднего значения
- Если значение совпадает, мы можем отсортировать его по алфавиту
- Не использовать
Lamba
Итак, имея в виду ваш вариант использования, мы запишем алгоритм, который не очень эффективен, но сделаю ту работу, которую вы хотите. Al go выглядит следующим образом:
- Создайте новый словарь дат студента, чтобы сохранить всех людей с таким же средним
- Отсортируйте новый словарь и сохраните его в тот же самый словарь
- Создайте новый словарь снова, теперь сохраните окончательный результат
- Просмотрите словарь даты студента
- Сортировка списка, который содержит несколько человек с одинаковыми значениями
- Перебрать значения снова
- Сохранить пару ключей и значений в new_dictionary
- Распечатать результат
Я видел ваш код, и он отлично работает, однако решение, которое вы собираетесь увидеть, довольно долгое. Complexity: O(n^3)
# Taking dummy dictionary into consideration for the test
student_average = {'Harsh': 50, 'Raghav': 70, 'Harshit': 50, 'Saurav': 90, 'Akash': 70, 'Bob': 60}
# This contains the list of people having same average
new_student_data = {}
# Storing the data in to the new dictionary
for key, value in student_average.items():
if value not in student_data:
student_data[value] = [key]
else:
student_data[value].append(key)
# Sorting the same dictionary and storing
student_data = dict(sorted(student_data.items()))
print(student_data) # OUTPUT => {50: ['Harsh', 'Harshit'], 60: ['Bob'], 70: ['Raghav', 'Akash'], 90: ['Saurav']}
# Final dictionary to store the result as per our requirements
result = {}
for key, value in student_data.items():
value.sort() # sorting the list so that, we have alphabetically ordered data
for item in value: # Iterating through the sorted list now
result[item] = key # using value item as key, and KEY as value in the new dict
print(result)
# OUTPUT
# >>> {'Harsh': 50, 'Harshit': 50, 'Bob': 60, 'Akash': 70, 'Raghav': 70, 'Saurav': 90}
Надеюсь, это решит то, что вы ищете, в более широком смысле. Дайте мне знать, если это вам поможет:)