Seite 1 von 1
List mit Dicts an Methode übergeben
Verfasst: Mittwoch 3. Oktober 2018, 14:53
von Lale
Hallo Ihr lieben,
ich bin noch ganz frisch in der Materie. Leider hänge ich grade an einem Problem fest und komme leider auch mit Recherche im Internet nicht weiter - wobei ich nicht ausschließen würde, dass ich an der falsche Stelle suche.
Problem (klingt so einfach)
-> Ich würde gern eine Liste mit Dicts an eine Methode übergeben um die Einträge geschlossen verarbeiten zu können.
Ein abstaktes Beispiel mit wenig Daten:
Name = [{'Name': 'Hans', 'Alter': '30'},
{'Name': 'Petra', 'Alter': '40'},
{'Name': 'Jürgen', 'Alter': '47'}]
Person.set_data(name_list=name_list )
Ich bekomme den Fehler TypeError: set_data() got multiple values for argument 'name_list'
Ja den Fehler habe ich natürlich verstanden, aber wie übergebe ich die Liste sonst? Ich habe bereits gesehen, dass man die Liste wiederrum ein ein DICT verschalen kann - leider möchte auch das nicht so richtig funktionieren.
Ich bin über jede Hilfe dankbar! Machmal sieht man den Wald vor lauter Bäumen nicht.
Liebe Grüße
Re: List mit Dicts an Methode übergeben
Verfasst: Mittwoch 3. Oktober 2018, 14:58
von __deets__
Das Beispiel ist leider ein bisschen zu abstrakt. Da da auch Namen nicht existieren, und vor allem nicht bekannt ist, wie set_data aussieht. Denn eigentlich fällt mir gerade nicht ein, wie man den Fehler mit nur einem Argument bekommen sollte. Mit zweien geht’s so:
Code: Alles auswählen
>>> def foo(bar, baz=None):
... pass
...
>>> foo(19, bar=20)
Traceback (most recent call last):
File "<string>", line 1, in <module>
TypeError: foo() got multiple values for argument 'bar'
Re: List mit Dicts an Methode übergeben
Verfasst: Mittwoch 3. Oktober 2018, 15:01
von Sirius3
Da der ganze wichtige Teil (die Funktion set_data, die Klasse für die Instanz Person) fehlt, und zudem die Namensschreibweise verwirrend ist, weil Person wie eine Klasse geschrieben wurde (Groß) aber ganz offensichtlich eine Instanz der Klasse ist, kann man nur spekulieren:
bei der Definition der Methode set_data fehlt das `self`.
Re: List mit Dicts an Methode übergeben
Verfasst: Mittwoch 3. Oktober 2018, 15:06
von Lale
Hallo und danke für die schnelle Antwort. Da habe ich im Beispiel wohl etwas übersehen:
Name_list ist bekannt und enthält als Liste die Dicts.
Name_list soll als Übergabeparameter an die Methode set_data übergeben werden
Die Instanz von "person" ist bereits gebunden.
Sollte natürlich so aussehen:
Code: Alles auswählen
namelist = [{'Name': 'Hans', 'Alter': '30'},
{'Name': 'Petra', 'Alter': '40'},
{'Name': 'Jürgen', 'Alter': '47'}]
person.set_data(name_list = name_list)
Wie würde sich der Fehler mit deiner Lösung behen lassen? Auch in deinem der Parameter kann leine Liste mit Dicts übergeben werden oder?
Re: List mit Dicts an Methode übergeben
Verfasst: Mittwoch 3. Oktober 2018, 15:09
von Sirius3
Naja, es fehlt immer noch die Definition der Klasse, und namelist ist nicht gleich name_list. Kannst Du bitte das nächste mal den gesamten Code, den Du auch verwendet hast, posten, und nicht irgendwas, was mit dem eigentlichen Problem nichts zu tun hat.
Ansonsten gilt immer noch meine Antwort.
Re: List mit Dicts an Methode übergeben
Verfasst: Mittwoch 3. Oktober 2018, 15:24
von Lale
Dann noch einmal mit dem Code:
Code und SQL liegen in unterschiedlichen .py-Dateien (Binden der Intanz klappt)
Code: Alles auswählen
from analyse.sqlite import SQL
sql = SQL()
#Datenversorung über API - hier eine verkürzte Version mit nur 4 Dicts
pricedata_list = [{'symbol': 'ETHBTC', 'id': 113, 'price': '0.03384700'},
{'symbol': 'LTCBTC', 'id': 174, 'price': '0.00887800'},
{'symbol': 'BNBBTC', 'id': 520, 'price': '0.00159980'},
{'symbol': 'NEOBTC', 'id': 211, 'price': '0.00276000'}]
sql.set_analysedata(pricedata_list = pricedata_list)
Re: List mit Dicts an Methode übergeben
Verfasst: Mittwoch 3. Oktober 2018, 15:36
von Sirius3
Und `self` fehlt immer noch. Eingerückt wird übrigens immer mit 4 Leerzeichen pro Ebene.
Re: List mit Dicts an Methode übergeben
Verfasst: Mittwoch 3. Oktober 2018, 15:37
von Lale
und es lag am "self" in der Deklaration der Methode
Danke für den Schups

Re: List mit Dicts an Methode übergeben
Verfasst: Mittwoch 3. Oktober 2018, 15:38
von __deets__
Und da sehen wir dann ja auch das Problem: deiner Methode set_analysedata fehlt das self. Das ist in Python nicht Pflicht das so zu benennen, womit es bei dir eben "pricedata_list" heisst. Wenn du jetzt also ein SQL-Objekt erzeugst, dann wird beim Aufruf der Methode set_aralysedata das erste Argument mit der Instanz selbst schon gebunden, und du probierst, da noch ein zweites, gleich benanntes Argument mit zu uebergeben - das kracht halt.
Also einfach self einfuehren in set_analysedata, und dieses Problem verschwindet.