verschachtelte datenstrukturen & dynam parameterübergabe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
roakin
User
Beiträge: 26
Registriert: Montag 30. April 2007, 09:31

Montag 30. April 2007, 15:28

ich habe 2 anfängerfragen ... ich habe in einem dictionary mehrere listen abgelegt also ungefähr so

Code: Alles auswählen

elemName = 'txt'
myDict[elemName] = ['txt1', 'txt2', 'txt3', 'txt4', 'txt5']
jetzt will ich aber an diese liste nachträglich was dranhängen bzw auch überprüfen ob in myDict[elemName] schon was drinnen steht oder nicht aber ich kann da scheinbar nicht mehr richtig auf die liste zugreifen

Code: Alles auswählen

myDict[elemName].append(newList)

geht jedenfalls nicht

die 2te frage die ich habe ist folgende: ich habe eine funktion mit einer beliebigen anzahl parameter, also

Code: Alles auswählen

def foo( url, *elements ):
jetzt muss ich diese funktion aber rekursiv aufrufen und weißt nicht wie ich da den funktionsaufruf mit den parametern füttern kann, da ich ja nicht weiß wieviele das sind

Code: Alles auswählen

foo( url, elements[0], elements[1], ... )
vielen dank im voraus,

stefan
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Montag 30. April 2007, 15:36

ich habe 2 anfängerfragen ...
Hmm -- hört doch mal auf, immer nach "anfängerfragen" zu fragen. Was definiert denn eine Anfängerfrage? Vielleicht ist es ja doch was größeres?
Mann... Selbstvertrauen! --> Frage ist Frage :) Ob anfänger oder nicht ist egal *g*


So, zum Thema:
roakin hat geschrieben:ich habe in einem dictionary mehrere listen abgelegt also ungefähr so

Code: Alles auswählen

elemName = 'txt'
myDict[elemName] = ['txt1', 'txt2', 'txt3', 'txt4', 'txt5']
jetzt will ich aber an diese liste nachträglich was dranhängen bzw auch überprüfen ob in myDict[elemName] schon was drinnen steht oder nicht aber ich kann da scheinbar nicht mehr richtig auf die liste zugreifen

Code: Alles auswählen

myDict[elemName].append(newList)

geht jedenfalls nicht
Geht jawohl!

Code: Alles auswählen

>>> d = {'la': 'lu', 'txt': ['ich', 'du', 'er', 'sie']}
>>> d
{'txt': ['ich', 'du', 'er', 'sie'], 'la': 'lu'}
>>> d['txt'].append('es')
>>> d
{'txt': ['ich', 'du', 'er', 'sie', 'es'], 'la': 'lu'}
Oder habe ich deine Absicht falsch verstanden?
€dit:
Ich sehe gerade, das du geschrieben hast 'newList'. Dann währe folgendes angebracht:

Code: Alles auswählen

>>> d = {'la': 'lu', 'txt': ['ich', 'du', 'er', 'sie']}
>>> d
{'txt': ['ich', 'du', 'er', 'sie'], 'la': 'lu'}
>>> d['txt'].extend(['es', 'wir', 'ihr', 'sie'])
>>> d
{'txt': ['ich', 'du', 'er', 'sie', 'es', 'wir', 'ihr', 'sie'], 'la': 'lu'}
die 2te frage die ich habe ist folgende: ich habe eine funktion mit einer beliebigen anzahl parameter, also

Code: Alles auswählen

def foo( url, *elements ):
jetzt muss ich diese funktion aber rekursiv aufrufen und weißt nicht wie ich da den funktionsaufruf mit den parametern füttern kann, da ich ja nicht weiß wieviele das sind

Code: Alles auswählen

foo( url, elements[0], elements[1], ... )
ehm... was spricht gegen

Code: Alles auswählen

foo(url, elements)
Zuletzt geändert von EnTeQuAk am Montag 30. April 2007, 15:40, insgesamt 2-mal geändert.
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Montag 30. April 2007, 15:38

Anhängen an eine Liste geht mit "append" (einzelnes Elemente)

Code: Alles auswählen

liste.append(element)
Anhängen von liste2 an liste1 machst du mit "extend":

Code: Alles auswählen

liste1.extend(liste2)
Prüfen ob Elemente in einer Liste entahlten sind:

Code: Alles auswählen

if liste:
    print "Liste hat Elemente"
else:
    print "Liste hat keine Elemente"
Für dich könnte die Methode "get" (für Dictionaries) noch ganz interessant sein. An Stelle von Listen, sind bei dir eventuell auch Mengen (set) geeigneter.

Zur zweiten Frage:

Code: Alles auswählen

def foo(url, *args):
    ...
    return foo(url_2, *args)
BlackJack

Montag 30. April 2007, 15:40

Das Anhängen funktioniert:

Code: Alles auswählen

In [16]: my_dict = dict()

In [17]: my_dict['txt'] = ['txt1', 'txt2', 'txt3', 'txt4', 'txt5']

In [18]: my_dict
Out[18]: {'txt': ['txt1', 'txt2', 'txt3', 'txt4', 'txt5']}

In [19]: my_dict['txt'].append('txt6')

In [20]: my_dict
Out[20]: {'txt': ['txt1', 'txt2', 'txt3', 'txt4', 'txt5', 'txt6']}
Wenn angehängt werden soll, falls der Schlüssel existiert, und eine neue Liste mit dem Wert angelegt werden soll, falls der Schlüssel nicht existiert, kann man die `setdefault()`-Methode benutzen:

Code: Alles auswählen

In [21]: my_dict.setdefault('txt', list()).append('txt7')

In [22]: my_dict
Out[22]: {'txt': ['txt1', 'txt2', 'txt3', 'txt4', 'txt5', 'txt6', 'txt7']}

In [23]: my_dict.setdefault('spam', list()).append('spam1')

In [24]: my_dict
Out[24]:
{'spam': ['spam1'],
 'txt': ['txt1', 'txt2', 'txt3', 'txt4', 'txt5', 'txt6', 'txt7']}
Zur zweiten Frage: Variable Anzahl von Argumenten sollte man im allgemeinen nicht benutzen wenn es ein Argument in Form einer Liste auch tut.
roakin
User
Beiträge: 26
Registriert: Montag 30. April 2007, 09:31

Montag 30. April 2007, 15:55

erstmal vielen dank für die schnellen antworten. problem 2 hat sich jetzt erledigt (darauf hätt ich auch selber kommen müssen) ... beim 1ten problem ist es bei mir daran gescheitert, dass ich die liste im dictionary nicht richtig initialisiert habe ... aber jetzt klappt alles

also noch einmal vielen dank ... ist echt ein super forum hier
Antworten