Expression Lambda (correction) qui crée un index (dictionnaire à clé de membre) des membres de l'objet collecté en python

Expression Lambda qui crée un index (dictionnaire à clé de membre) des membres de l'objet dans la collection avec python

import functools as f
makeindexes = lambda objects:{attr:{str(getattr(x,attr)):x for x in objects if attr in dir(x)} for attr in f.reduce(set.union,(set(y.__dict__.keys()) for y in objects if hasattr(y,"__dict__")),set())}

class A:
	def __init__(self,name):
		self.name = name
		self.id = id(self)

objs = [A(x) for x in ["tama","poti","mii"]]

indexes = makeindexes(objs)

print(indexes.keys())
#dict_keys(['id', 'name'])

print(indexes["name"]["poti"].name)
#poti

Si la valeur n'est pas unique en l'état, elle ne peut pas être indexée, j'ai donc décidé de l'envelopper dans une liste.

mMakeindexes = lambda objects:{outer:f.reduce(lambda d,o:d[getattr(o,outer)].append(o) or d,objects,{getattr(obj,outer):[] for obj in objects if outer in dir(obj)}) for outer in f.reduce(set.union,(set(y.__dict__.keys()) for y in objects if hasattr(y,"__dict__")),set())}

objs = [A("poti") for x in range(5)]

indexes = mMakeindexes(objs)

print(indexes["name"]["poti"])
#[<__main__.A object at 0x7f0b4f2d7710>, <__main__.A object at 0x7f0b4f2d7790>] [<__main__.A object at 0x7f0b4f2d77d0>, <__main__.A object at 0x7f0b4f2d7850>]

Hmmm, je ne peux pas l'écrire plus magnifiquement?

Recommended Posts

Expression Lambda (correction) qui crée un index (dictionnaire à clé de membre) des membres de l'objet collecté en python
Fonction Eval () qui calcule une chaîne de caractères comme expression en python
Comment connaître la structure interne d'un objet en Python
L'histoire de la création d'un Bot qui affiche les membres actifs dans un canal spécifique de Slack avec Python
Remarque: Signification de spécifier uniquement * (astérisque) comme argument dans la définition de fonction de Python
Confirmer l'écrasement du fichier avec l'option de prendre l'objet fichier comme argument avec Python argparse
Détruire l'expression intermédiaire de la méthode sweep avec Python
Ne pas être conscient du contenu des données en python
J'ai créé une application avec Lambda qui notifie LINE de "j'aime" à l'aide de l'API Qiita.
Obtenir la valeur d'une clé spécifique jusqu'à l'index spécifié de la liste de dictionnaires en Python
Essayez de gratter les données COVID-19 Tokyo avec Python
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
Calculez des millions de chiffres dans la racine carrée de 2 avec python
Python --Trouvez le nombre de groupes dans l'expression regex
[Homologie] Comptez le nombre de trous dans les données avec Python
Obtenez l'index de chaque élément de la matrice de confusion en Python
Créez une application qui recherche uniquement à l'aide de l'API de recherche personnalisée Google avec Python 3.3.1 dans Bottle
Dans le dictionnaire python, si une clé inexistante est accédée, initialisez-la avec une valeur arbitraire