Извлечь поле A из входного списка для сортировки в поле B - PullRequest
0 голосов
/ 06 мая 2019

По общему признанию, не очень броский заголовок.

С учетом ввода:

input = [("baz", 3), ("bar", 2), ("foo", 1), ("qux", 4)]

Какой лучший способ получить:

["foo", "bar", "baz", "qux"]

Я мог бы реализовать это,например, как:

map(lambda x: x[0], sorted(input, key=lambda x: x[1]))

Повторение дважды по одному и тому же набору данных кажется расточительным.Я задавался вопросом, есть ли лучший способ сказать функции сортировки, чтобы она выбирала первое поле (вместо всей записи), пока оно сортируется по второму полю.

Ответы [ 2 ]

4 голосов
/ 06 мая 2019

Если ваши первые элементы кортежа уникальны, Вы можете обработать input как dict. Тем не менее, этот метод работает только если ваш input является dict в первую очередь потому что в противном случае вы получите дополнительную итерацию в конструкторе dict.

>>> input = dict([("baz", 3), ("bar", 2), ("foo", 1), ("qux", 4)])
>>> sorted(input, key=input.get)
['foo', 'bar', 'baz', 'qux']
1 голос
/ 06 мая 2019

Попробуйте это:

[i[0] for i in sorted(input, key=lambda x:x[1])]  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...