Précautions lors du passage de def aux fonctions triées et groupby en Python? ??

J'étudie Python, mais je suis devenu accro et je suis resté coincé pendant environ une heure. Je l'ai résolu pour le moment, mais je ne peux pas m'empêcher, mais si quelqu'un comprend ce mécanisme, je vous serais reconnaissant si vous pouviez m'apprendre, alors je l'écrirai.

Ce qui suit est un programme qui mélange des joueurs de Los Angeles et de New York et les divise en bloc A et bloc B en combinant les noms de joueurs et les blocs.

groupLeague.py


import itertools
LA = [('Jake', 'B'), ('Elwood', 'A')]
NY = [('James', 'A'), ('Carry', 'B'), ('Steven', 'B')]
data = itertools.chain(LA, NY)

def getSortKey(item):
    return item[1]

grp = itertools.groupby(sorted(data, key=getSortKey(data), getSortKey(data))

Mais quand je fais ça, TypeError: 'itertools.chain' object is not subscriptable Sera joué avec une erreur.

Je ne l'ai pas compris du tout, et j'étais vraiment dedans, mais quand j'ai regardé un autre exemple de programme et que je l'ai revu, cela a fonctionné. Dans la dernière ligne,

grp = itertools.groupby(sorted(data, key=getSortKey(data)), getSortKey(data))

,

grp = itertools.groupby(sorted(data, key=getSortKey), getSortKey)

Et, à l'exception de l'argument de getSortKey, cela fonctionnait normalement.

Le programme a fonctionné pour le moment, mais je n'ai aucune idée de ce mécanisme. Je comprends que vous pouvez spécifier une "fonction qui peut obtenir une clé" en plus de la valeur de clé comme deuxième argument "partie clé" de groupby, mais lorsque vous spécifiez une fonction, pourquoi n'avez-vous pas besoin d'écrire un argument? Ou est-ce une erreur si j'écris un argument? ?? Pour autant que je puisse confirmer l'opération, je pense que le premier argument "partie itérable" (triée ~) est automatiquement traité comme un argument, mais il n'y avait pas une telle description dans le document.

【référence】 Documentation Python itertools --- Fonction de génération Itertool pour une exécution de boucle efficace

Il en va de même pour la fonction triée. Dans la partie de key = getSortkey, l'argument semble prendre automatiquement les données du premier argument, mais je ne comprends pas le mécanisme (le document ne l'a pas mentionné après tout).

【référence】 Fonctions intégrées de la documentation Python triées

Quel genre de mécanisme est-ce sans prendre d'argument ...? ?? Je l'ai recherché, mais je ne pouvais tout simplement pas le comprendre. Je suis vraiment désolé que ce soit une question rudimentaire, mais si vous le savez, ce serait grandement apprécié si vous pouviez m'apprendre.

Comment gérer ce genre de spécification délicate?

Recommended Posts

Précautions lors du passage de def aux fonctions triées et groupby en Python? ??
Fonctions de tri et de comparaison Python 3
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
Précautions lors de l'utilisation de Pit avec Python
À propos de Python dict et des fonctions triées
Comment utiliser les fonctions dans des fichiers séparés version Perl et version Python
Précautions lors de l'attribution de valeurs par défaut aux arguments dans les définitions de fonctions Python
Précautions lors du décapage d'une fonction en python
Comment utiliser is et == en Python
[Astuces] Écriture facile à lire lors de la connexion de fonctions en Python
Comment générer une séquence en Python et C ++
Précautions lors du traitement des structures de contrôle dans Python 2.6
[Python] Précautions lors de l'affectation de valeurs à des tableaux multidimensionnels
Envoyer un message à Skype et Chatwork en Python
Erreur lors de la tentative d'installation de psycopg2 en Python
Pour représenter la date, l'heure, l'heure et les secondes en Python
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
[Python] Précautions lors de l'acquisition de données en grattant et en les mettant dans la liste
Liste triée en Python
Convertir la date et l'heure zonées en temps Unixtime dans Python2.7
Points à garder à l'esprit lors du développement d'un robot d'exploration en Python
Différences de comportement entre les opérateurs append () et "+ =" lors de l'ajout de données à une liste en Python
Précautions lors du traitement du type ROS MultiArray en Python
Points à garder à l'esprit lors de la copie de listes Python
Choses à noter lors de l'initialisation d'une liste en Python
[Introduction à Python] Résumé des fonctions et méthodes qui apparaissent fréquemment en Python [Format du problème]
Écrire des tests en Python pour profiler et vérifier la couverture
[Python] Comment trier un dict dans une liste et une instance dans une liste
Remarques sur l'ajout de setter et deleter dans une classe dérivée à la propriété getter de la classe de base
Comment quitter lors de l'utilisation de Python dans Terminal (Mac)
Points à garder à l'esprit lors du traitement des chaînes en Python2
Points à garder à l'esprit lors du traitement des chaînes en Python 3
Je veux faire quelque chose avec Python à la fin
[Python] Lorsque vous souhaitez importer et utiliser votre propre package dans le répertoire supérieur
Précautions lors de la saisie à partir de CSV avec Python et de la sortie vers json pour faire exe
Un script qui compte jusqu'à 5 secondes et s'arrête dans le Python de Blender
Essayez de le faire avec GUI, PyQt en Python
Application pour afficher et rechercher des mémos locaux (agenda) en Python
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
Afficher les nombres et les caractères affectés aux variables dans l'impression python
Conseils pour coder courts et faciles à lire en Python
[Python] Résumé de l'utilisation des fonctions de fractionnement et de jointure
Un moyen standard de développer et de distribuer des packages en Python
Astuces utiles liées à la liste et aux instructions en Python
Méthode d'écriture pratique lors de l'ajout continu à la liste en Python
Que faire lorsque "SSL: CERTIFICATE_VERIFY_FAILED _ssl.c: 1056" apparaît en Python
[Introduction to Data Scientists] Bases de Python ♬ Fonctions et classes
Introduction à la vérification des effets Rédaction des chapitres 4 et 5 en Python
Problèmes et solutions à la demande de MySQL db dans Python 3
Précautions lors de l'utilisation de Python avec AtCoder
Orienté objet en langage C: "○ ✕ game" a été refacturé et porté en Python
Précautions lors du changement d'heure Unix en type datetime dans les pandas
Choses à garder à l'esprit lors de l'utilisation de cgi avec python.
Comment exécuter des commandes et des scripts shell externes en python
Essayez simplement de recevoir un webhook avec ngrok et Python
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Voyons comment utiliser def en python
Précautions pour la mise à niveau de TensorFlow (vers la version 1.3)
Pour vider stdout en Python
Remplacer les fonctions de bibliothèque en Python