Tutorial
Dictionary

Dictionaries sind Wörterbücher, in denen man über Schlüssel (Keys) Daten abspeichern kann. Zu beachten ist, dass Dictionaries nicht "geordnet" sind wie Listen, d.h. die Daten bleiben nicht in der Reihenfolge, in der man sie ein- oder hinzufügt. Dieser Umstand ist allerdings nicht weiter tragisch, da es die Aufgabe eines Wörterbuches ist, den Zusammenhang zwischen Schlüsselwort und Wert festzuhalten.

.keys() und .values()

   1 d = { 1:"Nummer Eins", "zwei":"1-3", "sechs":6 }
   2 print "Dict......:",d
   3 print "Schlüssel.:",d.keys()
   4 print "Werte.....:",d.values()

Ergebnis:

Dict......: {1: 'Nummer Eins', 'sechs': 6, 'zwei': '1-3'}
Schlüssel.: [1, 'sechs', 'zwei']
Werte.....: ['Nummer Eins', 6, '1-3']

Iteration - Schleife

   1 d = { 1:"Nummer Eins", "zwei":"1-3", "sechs":6 }
   2 
   3 print " 1. Einfache iteration über die keys:"
   4 for k in d:
   5     print k
   6 
   7 print "\n 2. Iteration über die values:"
   8 for v in d.values():
   9     print v
  10 
  11 print "\n 3. Iteration mittels items() 1:"
  12 for t in d.items():
  13     print t
  14 
  15 print "\n 4. Iteration mittels items() 2:"
  16 for k,v in d.items():
  17     print k,v
  18 
  19 print "\n 5. Iteration mittels iteritems() 1:"
  20 for i in d.iteritems():
  21     print i
  22 
  23 print "\n 6. Iteration mittels iteritems() 2:"
  24 for k,v in d.iteritems():
  25     print k,v

Ausgaben:

 1. Einfache iteration über die keys:
1
sechs
zwei

 2. Iteration über die values:
Nummer Eins
6
1-3

 3. Iteration mittels items() 1:
(1, 'Nummer Eins')
('sechs', 6)
('zwei', '1-3')

 4. Iteration mittels items() 2:
1 Nummer Eins
sechs 6
zwei 1-3

 5. Iteration mittels iteritems() 1:
(1, 'Nummer Eins')
('sechs', 6)
('zwei', '1-3')

 6. Iteration mittels iteritems() 2:
1 Nummer Eins
sechs 6
zwei 1-3

Der Unterschied zwischen einer Schleife über items() etc. und iteritems() etc. wird hier besprochen: http://www.python-forum.de/viewtopic.php?t=5216

Kurz gesagt, mit keys(), values() und items() wird über eine Liste, in die die entsprechenden Daten kopiert wurden, iteriert, bei iterkeys(), itervalues() und iteritems() werden die Daten bei jedem Schleifendurchlauf aus dem Dict geholt. Deswegen kann man z.B. bei Verwendung von items() in der Schleife Einträge aus dem Dict löschen.

mit Dicts arbeiten

   1 d = { 1:"Nummer Eins", "zwei":"1-3", "sechs":6 }
   2 d["neu"] = "ein neues Element" # Element hinzufügen
   3 print d
   4 d["neu"] = "alt" # Neuen Wert setzen
   5 print d
   6 del d["sechs"] # Element löschen
   7 print d

Ergebnis:

{1: 'Nummer Eins', 'neu': 'ein neues Element', 'sechs': 6, 'zwei': '1-3'}
{1: 'Nummer Eins', 'neu': 'alt', 'sechs': 6, 'zwei': '1-3'}
{1: 'Nummer Eins', 'neu': 'alt', 'zwei': '1-3'}

len() - Anzahl der Elemente

   1 d = { 1:"Nummer Eins", "zwei":"1-3", "sechs":6 }
   2 print len(d)

Ergebnis:

3

weiteres Beispiel

   1 def Anzeige(d, HinweisText):
   2     print "-"*10, HinweisText, "-"*10
   3     print d, "\n"
   4 
   5 d = {}
   6 Anzeige(d,"Dict erstellt")
   7 
   8 d["key1"] = "Wert1"
   9 Anzeige(d,'["key1"] hinzugefügt')
  10 
  11 d["key2"] = "Wert2"
  12 Anzeige(d,'["key2"] hinzugefügt')
  13 
  14 d["Zahl1"] = 123
  15 Anzeige(d,'["Zahl1"] hinzugefügt')
  16 
  17 d[1] = "eins"
  18 Anzeige(d,'[1] hinzugefügt')
  19 
  20 print "="*10, "iteration:", "="*37
  21 for i in d:
  22     print i," = ",d[i]
  23 
  24 print "="*60,"\n"
  25 
  26 del d[1]
  27 Anzeige(d,'[1] gelöscht')
  28 
  29 Anzeige(d.keys(),'Key-Liste, mit d.keys()')
  30 
  31 Anzeige(d.values(),'Value-Liste, mit d.values()')

Ergebnis:

---------- Dict erstellt ----------
{} 

---------- ["key1"] hinzugefügt ----------
{'key1': 'Wert1'} 

---------- ["key2"] hinzugefügt ----------
{'key2': 'Wert2', 'key1': 'Wert1'} 

---------- ["Zahl1"] hinzugefügt ----------
{'key2': 'Wert2', 'key1': 'Wert1', 'Zahl1': 123} 

---------- [1] hinzugefügt ----------
{'key2': 'Wert2', 'key1': 'Wert1', 'Zahl1': 123, 1: 'eins'} 

========== iteration: =====================================
key2  =  Wert2
key1  =  Wert1
Zahl1  =  123
1  =  eins
============================================================ 

---------- [1] gelöscht ----------
{'key2': 'Wert2', 'key1': 'Wert1', 'Zahl1': 123} 

---------- Key-Liste, mit d.keys() ----------
['key2', 'key1', 'Zahl1'] 

---------- Value-Liste, mit d.values() ----------
['Wert2', 'Wert1', 123] 

.get()

Mit der get-Methode kann man einen Key in einem Dict abfragen und gleichzeitig einen Standardwert angeben, der zurückgeliefert wird, wenn Key nicht im Dict existiert. Das ist z.B. dann hilfreich, wenn man einen Key in einem Dict abfragen möchte, es aber auch Fälle gibt, in dem der Key nicht gesetzt ist. Abgesehen von einem try-except kann man das natürlich auch so bewerkstelligen:

   1 if "wert1" in d and d["wert1"] == "eins":
   2     ...tu was...
   3 else:
   4     ...mach was anderes...

Allerdings geht es mit .get() kürzer:

   1 if d.get("wert1", None) == "eins":
   2     ...tu was...
   3 else:
   4     ...mach was anderes...

siehe auch

Andere Seiten zum Thema findest du in den entsprechenden Tags, hier:

Tutorial/Dictionary (last edited 2009-06-17 16:14:15 by localhost)