Как отсортировать словарь, который уже отсортирован по убыванию, чтобы люди с одинаковыми средними значениями отображались в алфавитном порядке?

Представьте, что у нас есть словарь имен людей и средних значений, отсортированных по значению (среднему) в порядке убывания. Я хочу отсортировать словарь таким образом, чтобы люди с одинаковыми средними значениями отображались в алфавитном порядке. Например:

Ayda,19
Alex,18
Jack,17
George,17
Robbie,15

Я хочу получить этот вывод:

Ayda,19
Alex,18
George,17
Jack,17
Robbie,15

Я хочу изменить следующий код:

def calculate_sorted_averages(file1, file2):
    with open (r'C:\Users\sony\Desktop\Python with Jadi\file1.csv', 'r') as f1:
        reader=csv.reader(f1)
        d={}
        for row in reader:
            name=row[0]
            average=float(row[1])
            d[name]=average
        sorted_dict=dict(sorted(d.items(), key=operator.itemgetter(1), reverse=False))
        with open (r'C:\Users\sony\Desktop\Python with Jadi\file2.csv', 'w', newline='') as f2:
            for key in sorted_dict.keys():
                writer=csv.writer(f2)
                writer.writerow([key,sorted_dict[key]])

Я думаю, что сортировка части словаря будет полезна, но я не знаю, как разделить словарь, отсортировать его по алфавиту, а затем снова объединить. Помогите, пожалуйста, разобраться?

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
0
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы предложил Сортировать в обратном порядке average для убывания (так что -1 * n), а затем name для алфавитного порядка. Например:

names_strng = """
Ayda,19
Alex,18
Jack,17
George,17
Robbie,15
"""


my_dct = dict(s.split(',') for s in names_strng.strip().split('\n'))

print(my_dct)

my_dct_srted = dict(sorted(my_dct.items(), key=lambda pare: (-float(pare[1]), pare[0])))

print(my_dct_srted)

Из:

{'Ayda': '19', 'Alex': '18', 'Jack': '17', 'George': '17', 'Robbie': '15'}
{'Ayda': '19', 'Alex': '18', 'George': '17', 'Jack': '17', 'Robbie': '15'}

Спасибо за вашу помощь, но когда я использую этот код, он сортирует весь словарь по алфавиту, а я хочу отсортировать только людей с похожими средними значениями в алфавитном порядке. mandana,7.5 alex,7.5 hamid,6.066666666666666 sina,11.285714285714286 sara,9.75 soheila,7.833333333333333 ali,5.0 sarvin,11.375 your code will give this output: ali,5.0 hamid,6.066666666666666 alex,7.5 mandana,7.5 soheila,7.833333333333333 sara,9.75 sarvin ,11.375 sina,11.285714285714286 но я хочу "sina" перед "sarvin". Что я должен делать?

Ayda 16.05.2022 23:32

Я нашел проблему. Так как мои числа были числами с плавающей запятой, в этом случае мне пришлось использовать "float" вместо "int" перед парой [1]. (т. е. float(pare [1])). Большое спасибо за твою помощь!

Ayda 17.05.2022 00:01

Ах да, я думаю, что, возможно, это было так. Я также обновлю свой ответ, чтобы уточнить, что это действительно так.

rv.kvetch 17.05.2022 00:35

Другие вопросы по теме