Python сортировка в одном словаре - PullRequest
1 голос
/ 07 ноября 2019

Команда,

Как отсортировать словарь вверх и вниз.

sorted(dictionary.keys(), reverse=True) генерирует результат 'ОТ' ниже: и яищите результат типа 'TO:'.

NOW  (sort down)            GOAL: 
{
'5.000': 'Y2A7',            '5.000': 'Y2A7',
'4.000': 'Y2A5',            '4.000': 'Y2A5',
'3.000': 'Y2A3',            '3.000': 'Y2A3', 
'2.002': 'Y2A6', << .002    '2.000': 'Y2A2',        
'2.001': 'Y2A4', << .001    '2.001': 'Y2A4', << .001
'2.000': 'Y2A2',            '2.002': 'Y2A6', << .002
'1.000': 'Y2A1'             '1.000': 'Y2A1' 
}

Думайте о нем как о сообщениях с ответами, отсортированными от нового-> старого. Потоковые сообщения должны появляться в старом-> новом порядке, например:

NOW:                GOAL: 
msg 5               msg 5
msg 4               msg 4
msg 3               msg 3
    msg 2.002       msg 2
    msg 2.001           msg 2.001
msg 2                   msg 2.002
msg 1               msg 1

Не имеет смысла, если сообщение с ответом 'msg 2' будет отсортировано new-> old

Есть идеи, как это можно сделать?

1 Ответ

1 голос
/ 07 ноября 2019

научиться создавать ключ сортировки, который возвращает кортеж (см. Сортировка словаря с пользовательской функцией сортировки ):

d = {
'5.000': 'Y2A7',
'4.000': 'Y2A5',
'3.000': 'Y2A3',
'2.002': 'Y2A6',
'2.001': 'Y2A4',
'2.000': 'Y2A2',
'1.000': 'Y2A1'
}

result = sorted(d , key = lambda x : (-int(float(x)),float(x)))

print(result)

ключи теперь отсортированы правильно:

['5.000', '4.000', '3.000', '2.000', '2.001', '2.002', '1.000']

(-int(float(x)),float(x)) возвращает значение, противоположное целочисленному значению ключа (в виде числа с плавающей точкой) в качестве первого элемента кортежа, а в качестве прерывателя связей - только значение с плавающей точкой. Поэтому, когда целочисленное значение совпадает, прерыватель связей локально меняет сортировку.

Теперь выполните итерацию, используя отсортированные ключи для получения отсортированных словарных данных, или выполните прямую сортировку d.items():

sorted(d.items(), key = lambda x : (-int(float(x[0])),float(x[0])))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...