Я застрял в приведенном выше сообщении об ошибке для программы ниже. Программа должна отсортировать словарь (с именем sc
) по значению (по убыванию) и, если значения совпадают, по алфавиту (по возрастанию).
def grootste_leveraars (sc):
sc2 = {}
for i in sc:
if not sc[i]:
sc2[i] = uitstroomsnelheid_goederen(sc, i)
return (sorted(sc2, key = lambda x: (-x[1], x[0])))
Uitstroomsnelheid_goederen()
- еще одна функция в моей программе, но я не думаю, что она актуальна. Если я сделаю небольшое изменение:
(sorted(sc2.items(), key = lambda x: (-x[1], x[0])))
Он работает, но он также напечатает значение. Мне просто нужен список ключей.
Это возможно?
2 ответа
Вам придется немного изменить свой подход. То, что у вас есть, работает с tuple
из items
и возвращает tuple
. Вы хотите работать с ключами и возвращать только ключи.
>>> # let sc2 be:
>>> sc2 = {'aaa': 10, 'bcd': 5, 'abc': 10, 'cde': 1}
>>>
>>> # your approach:
>>> sorted(sc2.items(), key = lambda x: (-x[1], x[0]))
[('aaa', 10), ('abc', 10), ('bcd', 5), ('cde', 1)]
>>>
>>> # see this one:
>>> sorted(sc2, key = lambda x: (-sc2[x], x))
['aaa', 'abc', 'bcd', 'cde']
В случаях, когда вам нужно проверить сравнение по нескольким условиям, например: если первый параметр такой же, то сравнить по другому параметру и так далее. Вы можете использовать comparator
в Python для написания логики сортировки, как показано ниже:
import functools
sc2 = {'wsd': 10, 'bcd': 5, 'abc': 10, 'cde': 1}
def my_cmp(a,b):
if sc2[a] == sc2[b]:
return -1 if a > b else 1
elif sc2[a] > sc2[b]:
return 1
else:
return -1
s = sorted(sc2, key=functools.cmp_to_key(my_cmp), reverse=True)
Output:-> ['abc', 'wsd', 'bcd', 'cde']
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.