Сортировка Python Dict - PullRequest
       2

Сортировка Python Dict

0 голосов
/ 07 ноября 2018

Я использую Python для сортировки диктовок по ключам. Но вывод не дает правильной сортировки. Кто-нибудь может помочь? Спасибо! Вот мой код:

expected_output= {'13':['0.0'], '14':['8.0'], '99':['1.0'], '100':['1.0'], 
'101':['0.0'], '102':['1.0'], '103':['1.0'], '104':['0.0'], '105':['0.0'], 
'106':['1.0'], '107':['1.0'], '108':['0.0'], '109':['0.0']}
expected_output=collections.OrderedDict(sorted(expected_output.items(), key=lambda t: t[1]))
print("Expected Output:")
print(expected_output)

Вывод:

Expected Output:
OrderedDict([('108', ['0.0']), ('101', ['0.0']), ('13', ['0.0']), ('104', 
['0.0']), ('105', ['0.0']), ('109', ['0.0']), ('107', ['1.0']), ('102', 
['1.0']), ('106', ['1.0']), ('99', ['1.0']), ('103', ['1.0']), ('100', 
['1.0']), ('14', ['8.0'])])

1 Ответ

0 голосов
/ 07 ноября 2018

items() возвращает (key, value) пары. t[1] смотрит на вторую часть этой пары, значение. Просто сделай

expected_output=collections.OrderedDict(sorted(expected_output.items()))

, что даст нам

OrderedDict([('100', ['1.0']), ('101', ['0.0']), ('102', ['1.0']), ('103', ['1.0']), 
             ('104', ['0.0']), ('105', ['0.0']), ('106', ['1.0']), ('107', ['1.0']), 
             ('108', ['0.0']), ('109', ['0.0']), ('13', ['0.0']), ('14', ['8.0']), ('99', ['1.0'])])

Если вы хотите отсортировать ключи как целые числа, а не строки, вы можете сделать

expected_output=collections.OrderedDict(sorted(expected_output.items(), 
                                               key=lambda pair: int(pair[0])))

чтобы получить

OrderedDict([('13', ['0.0']), ('14', ['8.0']), ('99', ['1.0']), ('100', ['1.0']),
             ('101', ['0.0']), ('102', ['1.0']), ('103', ['1.0']), ('104', ['0.0']),    
             ('105', ['0.0']), ('106', ['1.0']), ('107', ['1.0']), ('108', ['0.0']), 
             ('109', ['0.0'])])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...