#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}