Получение выборочных данных из вложенного списка python - PullRequest
0 голосов
/ 09 апреля 2020

Это формат вложенного списка:

[['A', 0], ['B', 0], ['V', 0], ['D', 0], ['E', 0], ['F', 0], ['G', 1], ['H', 1], ['I', 1], ['J', 3], [' K ', 0]]

У меня есть вложенный список в таком формате, мне нужно получить топ-3 вложенных списка, которые имеют максимальное целое число вложенных списков, например, мой результат должен быть [' J ', 3], [ 'I', 1], ['H', 1] Я пытался использовать вложенный l oop, где я могу получить максимальное целое число, но поражен получением строки из этих максимум 3 целых чисел

Может кто-нибудь, пожалуйста, помогите мне здесь

Ответы [ 2 ]

2 голосов
/ 09 апреля 2020

Я бы сделал это:

Первый список заказов по номеру во вложенном списке. В лямбда-функции я возвращаю значение, которое должно быть использовано для ordenation (2-й элемент вложенного списка):

a = [['A', 0],['B', 0], ['V', 0], ['D', 0], ['E', 0], ['F', 0], ['G', 1], ['H', 1], ['I', 1], ['J', 3], ['K', 0]]

sorted_list = sorted(a, key=lambda n: n[1], reverse=True)
# [['J', 3], ['G', 1], ['H', 1], ['I', 1], ['A', 0], ['B', 0], ['V', 0], ['D', 0], ['E', 0], ['F', 0], ['K', 0]]

При этом я могу нарезать 3 первых элемента:

sorted_list = sorted_list[:3]
# [['J', 3], ['G', 1], ['H', 1]]

И наконец, получить список только с буквой (строка):

[l[0] for l in sorted_list]
# ['J', 'G', 'H']

Все сразу:

[n[0] for n in sorted(a, key=lambda n: n[1], reverse=True)[:3]]
1 голос
/ 09 апреля 2020

Добавляя к @ salpreh's ответ, вы также можете использовать operator.itemgetter с key для небольшого увеличения скорости:

from operator import itemgetter

a = [['A', 0],['B', 0], ['V', 0], ['D', 0], ['E', 0], ['F', 0], ['G', 1], ['H', 1], ['I', 1], ['J', 3], ['K', 0]]

print(sorted(a, key=itemgetter(0), reverse=True))
# [['V', 0], ['K', 0], ['J', 3], ['I', 1], ['H', 1], ['G', 1], ['F', 0], ['E', 0], ['D', 0], ['B', 0], ['A', 0]]

Это question предлагает статистику производительности между ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...