Python: Filtern basierend auf spezifische Arrays in einer Liste?

1 Antwort

Zum Beispiel mit einer List Comprehension, wobei wir eine neue Liste aus der bestehenden aufbauen, aber jedes Element auf eine Bedingung prüfen:

>>> data = [{"raum": "100", "name": "name", "gebäude": "rathaus"}, {"raum": "430", "name": "name", "gebäude": "supermarkt"}]
>>> data_filtered = [g for g in data if g["gebäude"] == "rathaus"]
>>> data_filtered
[{'raum': '100', 'name': 'name', 'gebäude': 'rathaus'}]

Alternativ kann man auch filter() verwenden.

"Arrays" sind hier übrigens gar nicht zu finden. Das ist eine Liste von Dictionarys.

Darius1308 
Fragesteller
 15.10.2023, 19:49

Oh 😂... Ja, ich bin ziemlich neu in Python. Aber irgendwie funktioniert es immernoch nicht richtig...

0
jo135  15.10.2023, 19:50
@Darius1308

"Irgendwie funktioniert es nicht" ist halt keine sehr brauchbare Fehlerbeschreibung. Den obigen Ausschnitt kannst du ganz einfach selbst ausprobieren.

0
Darius1308 
Fragesteller
 15.10.2023, 19:53
@jo135

Alles klar. Ich versuche es mal etwas genauer zu erläutern. Online Stundenplan Webuntis... ich versuche mich über die API mit Python einzuloggen. Hat auch geklappt. Nur versuche ich jetzt mit der Funktion rooms() [alle Räume die Webuntis zur Verfügung stehen] alle Räume mit "building":"WS" zu finden... Klappt nur nicht. Noch nicht. Nachher möchte ich einen Alexa Skill erstellen, welcher mir dann den aktuellen Stundenplan vorliest in Woche/Stunde XYZ usw.
Das steht mir zur Verfügung: https://webuntis.noim.me/classes/WebUntis.html#constructor

Nur bin ich auch mal wieder zu dumm... new webuntis.. scheint nicht definiert zu sein.

0
Darius1308 
Fragesteller
 15.10.2023, 20:04
@jo135

Sche**e, es tut mir leid. Ich bin eben einfach erst seit etwa... heute in Python drinne.. bzw. beschäftige mich damit. Aber was nutze ich jetzt? Die Filter-Function? Richtig?

0
jo135  15.10.2023, 20:09
@Darius1308

Anscheinend kann man auch Comprehensions verwenden. Aber es sind eben keine Dictionaries in der Liste drin, sondern RoomObjects. Also würde ich etwa sowas hier probieren:

[raum for raum in rooms_resultat if raum.name == "dings"]

Oder mit der filter()-Methode mutmaßlich sowas wie

rooms_resultat.filter(name="dings")

Wobei RoomObject zwei Attribute hat (name und long_name), keine Ahnung welches du anschauen musst.

0
Darius1308 
Fragesteller
 15.10.2023, 20:20
@jo135

Mh... ich brauche eigentlich building... name und long_name helfen nichts...

0
Darius1308 
Fragesteller
 15.10.2023, 20:22
@jo135

es gibt id, name, longName, active, did und building - ich brauche letzteres.. verstehe nicht warum es nur die 3 ersten gibt...

0