Как я могу отсортировать вложенный список на основе числовых значений c? - PullRequest
3 голосов
/ 27 февраля 2020

У меня есть вложенный список, который выглядит следующим образом:

raw =  
[[(8, 0.44880571384598744), (17, 0.0403732344197908), 
(13, 0.03796821181062157), (1, 0.03777621092166489), 
(3, 0.02907007584458954), (5, 0.027577126778171947)], 
[(6, 0.24885153810452418), (13, 0.11945937235381485), 
(1, 0.07967490411502279), (7, 0.059837943219436064), 
(11, 0.054917316390175455), (3, 0.05439173103552319), 
(12, 0.042902668032641526), (2, 0.04067120278932331)]]

Я хочу отсортировать вложенный список на основе int по индексу [0] каждого подсписка.

Но когда Я пытаюсь это:

sortraw = []
for line in raw:
    k = sorted(line[0])
    sortraw.append(k)

Списки сортируются по значению с плавающей запятой каждого подсписка, и вложенный список исчезает.

Мой желаемый результат будет выглядеть так:

[[(1, 0.03777621092166489), (3, 0.02907007584458954), 
(5, 0.027577126778171947), (8, 0.44880571384598744),
(13, 0.03796821181062157), (17, 0.0403732344197908)], 
[(1, 0.07967490411502279), (2, 0.04067120278932331), 
(3, 0.05439173103552319), (6, 0.24885153810452418),
(7, 0.059837943219436064), (11, 0.054917316390175455),  
(12, 0.042902668032641526), (13, 0.11945937235381485)]]

Как я могу это сделать?

Ответы [ 3 ]

3 голосов
/ 27 февраля 2020
raw = [[(8, 0.44880571384598744), (17, 0.0403732344197908), 
... (13, 0.03796821181062157), (1, 0.03777621092166489), 
... (3, 0.02907007584458954), (5, 0.027577126778171947)], 
... [(6, 0.24885153810452418), (13, 0.11945937235381485), 
... (1, 0.07967490411502279), (7, 0.059837943219436064), 
... (11, 0.054917316390175455), (3, 0.05439173103552319), 
... (12, 0.042902668032641526), (2, 0.04067120278932331)]]
>>> [sorted(sublist) for sublist in raw]
[[(1, 0.03777621092166489), (3, 0.02907007584458954), (5, 0.027577126778171947), (8, 0.44880571384598744), (13, 0.03796821181062157), (17, 0.0403732344197908)], [(1, 0.07967490411502279), (2, 0.04067120278932331), (3, 0.05439173103552319), (6, 0.24885153810452418), (7, 0.059837943219436064), (11, 0.054917316390175455), (12, 0.042902668032641526), (13, 0.11945937235381485)]]

Или сделать это на месте:

for sublist in raw: sublist.sort()
2 голосов
/ 27 февраля 2020

, если вы не хотите сортировать весь список raw, который вы можете использовать:

list(map(sorted, raw)
1 голос
/ 27 февраля 2020

Вместо этого вы можете использовать лямбда-функцию:

print(list(map(lambda x:sorted(x), raw)))

вывод:

[[(1, 0.03777621092166489), (3, 0.02907007584458954), (5, 0.027577126778171947), (8, 0.44880571384598744), (13, 0.03796821181062157), (17, 0.0403732344197908)], [(1, 0.07967490411502279), (2, 0.04067120278932331), (3, 0.05439173103552319), (6, 0.24885153810452418), (7, 0.059837943219436064), (11, 0.054917316390175455), (12, 0.042902668032641526), (13, 0.11945937235381485)]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...