Сортировать вложенный список в Python 3 - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть этот вложенный список, и я хочу отсортировать список по ключу и значению кортежа соответственно.

data = [ 14, [('the', 3),
        ('governing', 1),
        ('wisdom', 1),
        ('about', 3),
        ('writing', 1)]]

И вывод

output = [ 14, [('about', 3),
             ('governing', 1),
             ('wisdom', 1),
             ('writing', 1),
             ('the', 3)]]

отсортировать что-то вроде этого
[data_structure[0],sorted(data_structure[1],key = lambda x: x[1])]

пока без этого метода сортировки и объединения срезов, если есть лучший способ, пожалуйста, поделитесь.Ищете ваш чистый питонический подход.

определенно благодарен за новичка питона, как я.

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Учитывая, что индексы явно имеют значение, небольшая настройка читабельности будет заключаться в распаковке источника list в именованные переменные (самодокументируемые имена!), А затем перепаковке.Если вы похожи на меня, вы также можете отбросить lambda (который я использую только тогда, когда никакой встроенный не может выполнить работу, именно в качестве подсказки, что есть нечто большее, чем кажется на первый взгляд) в пользу operatorпомощник, созданный для этой задачи.

Например:

# At top of file
from operator import itemgetter


# Unpack to useful names
doc_id, word_counts = data_structure

# Sort with self-documenting key function and repack
new_structure = [doc_id, sorted(word_counts, key=itemgetter(1))]

С точки зрения производительности, я не ожидаю здесь значительных преимуществ или затрат;Построение itemgetter имеет несколько более высокие фиксированные издержки, чем lambda, но немного меньше накладных расходов на элемент при вычислении ключей.Распаковка по именам обычно занимает меньше времени, чем индексация, но, конечно, вам нужно перезагрузить их, так что это, вероятно, стирка.По сути, я даю этот ответ исключительно для того, чтобы побудить больше самодокументированного кода использовать полезные имена для переменных и функций.

0 голосов
/ 28 декабря 2018

вместо использования функции sorted используйте sort

data = [ 14, [('the', 3),
        ('governing', 1),
        ('wisdom', 1),
        ('about', 3),
        ('writing', 1)]]

data[1].sort(key=lambda x:x[1])
print(data)

# output : [14, [('governing', 1), ('wisdom', 1), ('writing', 1), ('the', 3), ('about', 3)]]

, это более питонно и легко читаемо.

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