Сортировка ключей словаря без использования Lambda - PullRequest
0 голосов
/ 19 июня 2020

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

У меня есть словарь имен и средних значений, какую базовую c функцию использовать вместо:

sorted_name_averages=sorted(name_averages.items(), key=lambda t: t[::-1])

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Пусть ваш словарь будет:

dic={'c':1,'b':2,'a':3}
dic2={}
for key in sorted(dic.keys()) :
    dic2[key]={dic[key]}
print(dic2)

Это вернет следующий результат:

{'a':{3},'b':{2},'c':{1}}

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

Надеюсь, это помогло!
Если нет, извините за потраченное время. Я не нашел лучшего варианта. :)

0 голосов
/ 19 июня 2020

Чтобы лучше понять вашу проблему, я указываю вариант использования, это:

  • Вы хотите отсортировать словарь на основе среднего значения
  • Если значение совпадает, мы можем отсортировать его по алфавиту
  • Не использовать Lamba

Итак, имея в виду ваш вариант использования, мы запишем алгоритм, который не очень эффективен, но сделаю ту работу, которую вы хотите. Al go выглядит следующим образом:

  1. Создайте новый словарь дат студента, чтобы сохранить всех людей с таким же средним
  2. Отсортируйте новый словарь и сохраните его в тот же самый словарь
  3. Создайте новый словарь снова, теперь сохраните окончательный результат
  4. Просмотрите словарь даты студента
    • Сортировка списка, который содержит несколько человек с одинаковыми значениями
    • Перебрать значения снова
    • Сохранить пару ключей и значений в new_dictionary
  5. Распечатать результат

Я видел ваш код, и он отлично работает, однако решение, которое вы собираетесь увидеть, довольно долгое. 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}

Надеюсь, это решит то, что вы ищете, в более широком смысле. Дайте мне знать, если это вам поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...