Seite 1 von 1
Liste mit Schlüsseln und Werten aus Variablen befüllen?
Verfasst: Sonntag 23. Februar 2020, 00:09
von Chris87
Hallo,
vermutlich ist das wieder eine totale Anfängerfrage. Ich möchte gerne eine Liste erstellen, die Personen mit Schlüsseln und Werten darstellt. Beispiel:
Code: Alles auswählen
{
"name": "Max",
"lastname": "Mustermann",
"gender": "männlich",
"age": "41"
},
{
"name": "Erika",
"lastname": "Mustermann",
"gender": "weiblich"
}
Diese Liste soll automatisch aus Werten erstellt werden, die von einer Webseite ausgelesen werden. In meinem Beispiel kann es sein, dass mal ein Wert fehlt (z.B. "age"). Dieser Wert soll dann ausgelassen werden.
Code: Alles auswählen
person_list = []
for url in urls:
html = requests.get(url, headers=headers, timeout=20).text
soup = BeautifulSoup(html, 'lxml')
name = soup.find("span", class_="name").text
lastname = soup.find("span", class_="lastname").text
gender = soup.find("span", class_="gender").text
age = soup.find("span", class_="age")
if age:
age = age.text
Ich weiß, dass ich mit
person_list.append() nun einzelne Werte der Liste hinzufügen kann. Ich verstehe aber nicht, wie ich die Liste mit Schlüsseln und Werten befüllen kann, so dass das Ergebnis wie im oberen Beispiel aussieht.
Vielen Dank im Voraus.
Re: Liste mit Schlüsseln und Werten aus Variabeln befüllen?
Verfasst: Sonntag 23. Februar 2020, 00:20
von __blackjack__
@Chris87: Du befüllst die Liste ja nicht mit Schlüsseln und Werten sondern mit Wörterbüchern. Du musst halt für jede Person ein Wörterbuch mit den Schlüsseln und Werten erstellen und das dann an die Liste anhängen.
Grunddatentypen haben nichts in Namen verloren. `person_list` wäre also einfach `persons`.
Das zweite Positionsargument von `find()` wird als Klasse angenommen wenn es eine Zeichenkette ist, da kann man sich also das ``class_=`` sparen.
Der Code behandelt nicht den Fall wenn tatsächlich mal eine Zeitüberschreitung vorkommt und geht zudem einfach davon aus das das `text`-Attribut auch tatsächlich der Inhalt ist den Du erwartest und nicht beispielsweise eine Fehlermeldung wenn der Webserver gar nicht die Webseite sendet sondern einen Fehler sendet.
Soll das Alter tatsächlich als Text und nicht als Zahl weiterverarbeitet werden?
Re: Liste mit Schlüsseln und Werten aus Variablen befüllen?
Verfasst: Sonntag 23. Februar 2020, 00:23
von Sirius3
Das Stichwort heißt Wörterbuch (dict), und dazu gibt es ein ganzes Kapitel in der Python-Dokumentation:
https://docs.python.org/3/tutorial/data ... ctionaries
Re: Liste mit Schlüsseln und Werten aus Variablen befüllen?
Verfasst: Sonntag 23. Februar 2020, 00:42
von Chris87
Hallo,
das Alter soll natürlich als Zahl weiterverarbeitet werden.
Der Code war auch nur als Beispiel gedacht. Im finalen Code gibt es dann auch eine Fehlerüberprüfung (Try Except).
Also benötige ich ein Dictionary anstelle einer Liste:
Aber wie kann ich das Dictionary dann entsprechend mit den Werten befüllen?
Code: Alles auswählen
persons.update = {'name': name, 'lastname': lastname, "gender": gender}
Würde das so funktionieren? Und muss ich dann, falls das Alter vorhanden ist, eine weitere Bedingung hinzufügen und dort das "persons.update" erneut definieren oder lässt sich das einfacher lösen?
Re: Liste mit Schlüsseln und Werten aus Variablen befüllen?
Verfasst: Sonntag 23. Februar 2020, 02:05
von __blackjack__
@Chris87: Nein du brauchst für jede einzelne Person ein Wörterbuch das dann jeweils an die Liste als Wert angehängt wird. Das hast Du doch im Grunde im ersten Beitrag bereits als literale Werte gezeigt. Da fehlt vor dem ganzen nur eine [ und danach eine ] und dann ist das doch genau die Datenstruktur die Du haben willst: Eine Liste mit einem Wörterbuch pro Person:
Code: Alles auswählen
In [69]: [{
...: "name": "Max",
...: "lastname": "Mustermann",
...: "gender": "männlich",
...: "age": 41
...: },
...: {
...: "name": "Erika",
...: "lastname": "Mustermann",
...: "gender": "weiblich"
...: }]
Out[69]:
[{'name': 'Max', 'lastname': 'Mustermann', 'gender': 'männlich', 'age': 41},
{'name': 'Erika', 'lastname': 'Mustermann', 'gender': 'weiblich'}]
Re: Liste mit Schlüsseln und Werten aus Variablen befüllen?
Verfasst: Montag 24. Februar 2020, 09:16
von Chris87
Danke.