У меня есть простой словарь и список, который я хотел бы отсортировать по значениям в моем словаре.
data_dict = {'foo' : 'one', 'bar' : 'two', 'foobar' : 'three', 'notinsort' : 'four'}
custom_sort = ['three','one','two']
Моя собственная попытка заключалась в использовании словарного понимания с настраиваемым ключом в сортировке. :
{k:v for k,v in sorted(data_dict.items(), key=lambda i : custom_sort.index(i[1]) )}
, которая по праву вернет ValueError: 'four' is not in list
без проблем, я могу отфильтровать это с помощью оператора if-else внутри лямбды? так как я все еще хочу, чтобы значения были изначально отсортированы моей пользовательской сортировкой, тогда будет естественная сортировка.
{
k: v
for k, v in sorted(
data_dict.items(),
key=lambda i: custom_sort.index(i[1])
if [k for k in data_dict.values() if k in custom_sort]
else sorted(data_dict.items()),
)
}
это возвращает тот же ValueError, любые варианты, которые я пробовал на этом, приведут к естественной сортировке, игнорирующей мой пользовательский ключ.
мой желаемый вывод из приведенного выше ввода - :
data_dict = {'foobar' : 'three', 'foo' : 'one', 'bar' : 'two', 'notinsort' : 'four'}
У меня возникли следующие вопросы:
Как отсортировать словарь по значению? & Пользовательская сортировка Python Словарь
но не смог прийти к ответу.