Lambda-Ausdruck (Korrektur), der einen Index (Wörterbuch mit Mitgliedsschlüssel) der Mitglieder des Objekts erstellt, das in Python gesammelt wird

Lambda-Ausdruck, der mit Python einen Index (Member-Keyed Dictionary) der Mitglieder des Objekts in der Auflistung erstellt

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

Wenn der Wert nicht eindeutig ist, kann er nicht indiziert werden. Deshalb habe ich beschlossen, ihn in eine Liste aufzunehmen.

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, kann ich es nicht schöner schreiben?

Recommended Posts

Lambda-Ausdruck (Korrektur), der einen Index (Wörterbuch mit Mitgliedsschlüssel) der Mitglieder des Objekts erstellt, das in Python gesammelt wird
Die eval () -Funktion, die eine Zeichenfolge als Ausdruck in Python berechnet
Wie Sie die interne Struktur eines Objekts in Python kennen
Die Geschichte des Erstellens eines Bots, der aktive Mitglieder in einem bestimmten Slack-Kanal mit Python anzeigt
Hinweis: Bedeutung der Angabe von nur * (Sternchen) als Argument in der Funktionsdefinition von Python
Bestätigen Sie das Überschreiben der Datei mit der Option, das Dateiobjekt als Argument mit Python argparse zu verwenden
Zerstören Sie den Zwischenausdruck der Sweep-Methode mit Python
Den Inhalt der Daten in Python nicht kennen
Ich habe mit Lambda eine App erstellt, die LINE über die Qiita-API über "Likes" informiert.
Ruft den Wert eines bestimmten Schlüssels bis zum angegebenen Index der Wörterbuchliste in Python ab
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Berechnen Sie mit Python Millionen von Stellen in der Quadratwurzel von 2
Python - Ermitteln Sie die Anzahl der Gruppen im regulären Ausdruck
[Homologie] Zählen Sie mit Python die Anzahl der Löcher in den Daten
Ruft den Index jedes Elements der Verwirrungsmatrix in Python ab
Erstellen Sie eine Anwendung, die nur mit der Google Custom Search-API mit Python 3.3.1 in Bottle sucht
Wenn im Python-Wörterbuch auf einen nicht vorhandenen Schlüssel zugegriffen wird, initialisieren Sie ihn mit einem beliebigen Wert