2016-01-02 2 views
0

В documentation для itertools.groupby(),Что такое keyfunc, используемый в документации itertools.groupby() Python?

groups = [] 
uniquekeys = [] 
data = sorted(data, key=keyfunc) 

Я вижу, что keyfunc используется в качестве ключа для сортировки данных. К чему относится это ключевое слово?

+2

От страницы, которую вы только что связали: * «Ключ - это функция, вычисляющая значение ключа для каждого элемента. Если не указано или нет, ключ по умолчанию использует функцию идентификации и возвращает элемент без изменений.» *. – vaultah

+2

Кто на земле поддержал это? –

+1

Кто на земле думает, что неясно, о чем они спрашивают? Конечно, это полный вопрос о замораживании мозгов, но его четко задают и легко ответить. –

ответ

3

Это не ключевое слово. Он ссылается на любую функцию, которую вы передаете на sorted в качестве параметра key.

Это не упоминается конкретно в разделе документов, к которым вы привязались, но если вы просматриваете страницу, вы найдете ее в сводной таблице вверху.

Iterator Arguments    Results          Example 
groupby() iterable[, keyfunc] sub-iterators grouped by value of keyfunc(v) 

В документации Python, соглашение является то, что дополнительные детали обозначены квадратными скобками, так что здесь iterable[, keyfunc] означает, что вы должны пройти итератор, и, возможно, параметр, называемый keyfunc. Кажется странным, что нет никакого примера, поскольку это могло бы сделать вещи более ясными.

Как указано в документации, «Ключ - это функция, вычисляющая значение ключа для каждого элемента. Если не указано или нет, ключ по умолчанию использует функцию идентификации и возвращает элемент без изменений». Это полезно, например, для сортировки по второму элементу в списке.

Некоторые примеры от кого-то, у кого были проблемы с этим разделом документов, в том числе с использованием лямбда-функции в качестве key, приведены в this question.

+1

Хорошо, так что keyfunc - это просто заполнитель, говорящий вам поставить свою собственную ключевую функцию. Это кажется очевидным сейчас, потому что именно так написано все документы Python, но в тот момент, когда я думал, что это что-то особенное, определенное itertools. Большое спасибо! –

Смежные вопросы