Я хочу получить два наименьших числа из словаря

#python

#python

Вопрос:

В принципе, у меня есть словарь с 6 значениями, и я хочу получить два наименьших значения, чтобы исключить их. Как я могу получить два наименьших значения из словаря.

Я уже пробовал использовать: min(eleminate.items(), key=lambda x: x[1]), но это работает только один раз для меня. Второе значение не приходит.

 eleminate = {"Couple1":Couple1,"Couple2":Couple2,"Couple3":Couple3,"Couple4":Couple4,"Couple5":Couple5,"Couple6":Couple6}
eleminate.items()
FSmallest = min(eleminate.items(), key=lambda x: x[1]) 
SSmallest = min(eleminate.items(), key=lambda y: y[0]) 
print(eleminate)
gone = print(FSmallest," and ",SSmallest," have been eleminated!")
  

Мой код выводит одно и то же значение дважды. Например:

 That was the end of Round one!
{'Couple1': 3, 'Couple2': 6, 'Couple3': 9, 'Couple4': 12, 'Couple5': 15, 'Couple6': 18}

('Couple1', 3)  and  ('Couple1', 3)  have been eleminated!
  

Комментарии:

1. FSmallest наименьшее значение, SSmallest наименьшее имя. Ничто в вашем коде не становится вторым по величине из всего.

2. Отсортируйте eleminate.items() по значениям, затем получите первые два элемента результирующего списка.

3. Кстати, у вас орфографическая ошибка, это eliminate .

Ответ №1:

Есть несколько способов сделать это.

Я бы использовал sorted :

 from operator import itemgetter

print(sorted(data.items(), key=itemgetter(1))[:2])
  

Вывод:

 [('Couple1', 3), ('Couple2', 6)]
  

Чтобы получить словарь без этих двух элементов:

 dict(sorted(data.items(), key=itemgetter(1))[2:]))
  

Вывод:

 {'Couple3': 9, 'Couple4': 12, 'Couple5': 15, 'Couple6': 18}
  

Ответ №2:

Начните с сортировки вашего словаря по значению, используя sorted значения on

 import operator
eleminate = {'Couple1': 3, 'Couple2': 6, 'Couple3': 9, 'Couple4': 12, 'Couple5': 15, 'Couple6': 18}

sorted_eleminate = sorted(eleminate.items(), key=operator.itemgetter(1))
#[('Couple1', 3), ('Couple2', 6), ('Couple3', 9), ('Couple4', 12), ('Couple5', 15), ('Couple6', 18)]
  

Затем удалите первые два элемента в отсортированном списке

 for key, value in sorted_eleminate[0:2]:
    del eleminate[key]
print(eleminate)
#{'Couple3': 9, 'Couple4': 12, 'Couple5': 15, 'Couple6': 18}
  

Или просто получить словарь без первых двух элементов

 print(dict(sorted_eleminate[2:]))
#{'Couple3': 9, 'Couple4': 12, 'Couple5': 15, 'Couple6': 18}