Ich hoffe, dass ich alle Fragen klären konnte. Zu EAFP empfehle ich dir noch ein wenig die Suchmaschine deiner Wahl zu befragen.
Jup, fast, danke für die ausführliche Erklärung

. Fun Trivia: EAFP steht unter anderem für "The European Association of Fish Pathologists",

.
Die Benutzt du sowohl oben als auch unten als Schlüssel. Daher solltest du sie einmal als Konstante definieren und dann nur noch die Konstante verwenden.
Meinst du in diesem Stil?:
Code: Alles auswählen
def new():
a = "Name:"
b = "Address:"
c = "Tel. Number:"
name = raw_input("Name:")
address = raw_input("Address:")
tel_nr = raw_input("Tel. Number:")
person = {a:name, b:address, c:tel_nr}
pb[name] = person
Aber dann müsste ich ja alle Konstanten in jedem Block wieder definieren... irgendwie unnötige Verlängerung des Codes (ausser ich führe sie alle durch Parameter oder als globals ein... ) oder verstehe ich das falsch?
Im Prinzip kannst du auch die Liste als Konstante erzeugen und dann per "zip"-Funktion in Zeile 39 das Dictionary zusammenfassen:
Das ist ne tolle Sache, kannte ich noch nicht

. Aber irgendwie bekomme ich dann schnell Probleme. Die Liste 'order' habe ich ja erstellt, damit die Angaben in einer bestimmten Reihenfolge ausgegeben werden. Wenn ich die Liste in das Dictionary nehme, geht das wieder verloren. Die einzige Möglichkeit wäre wieder, die Liste separat mitzunehmen.
Bsp:
Code: Alles auswählen
def main ():
keys = ['b', 'a', 'c']
values = ['bee', 'apple\ntree', 'cedar']
pairs = dict(zip(keys, values))
output(pairs)
def output(pairs):
print pairs
for key in pairs:
print "%s:%s" %(key,pairs[key])
if __name__ == "__main__":
main()
Ausgabe:
Code: Alles auswählen
{'a': 'apple\ntree', 'c': 'cedar', 'b': 'bee'}
a:apple
tree
c:cedar
b:bee
(Anstatt bee - apple - cedar)
Dabei fällt mir doch auf, dass die Schlüsselname sehr unglücklich gewählt sind. Schlüssel so zu wählen, dass sie sowohl als Daten, als auch als Ausgabe dienen ist etwas ungeschickt.
Aber ansonsten müsste ich ja für jedes Attribut ein print-statement machen (um zu spezifizieren, was vorne dran steht), nicht? Dazu kommt, dass ich dann wieder eine ganze Reihe von if-statements machen müsste.
Ein try/except ist eben der Python-Weg
Alles klar
Hier hätte man den seltenen Fall, wo ein "isinstance" angebracht wäre und eine einfache Verzweigung aufgebaut wird.
Dafür müsste ich aber zuerst eine Klasse aufbauen, oder?
Da mir Klassen zur Zeit noch eher fremd sind, belasse ich es mal wies ist, aber werde ggf. später darauf zurückkommen

.
Zu den Namen: was hast du nur mit diesen Abkürzungen? Die Namen sind nun wirklich nicht so lang, dass das nötig wäre. Als nächstes kürzt du noch "list" noch mit "lst" ab ^^
Du kannst die selben Namen in verschiedenen Funktionen verwenden, die Namensräume sind sauber getrennt. Etwas "navigation" zu nennen, weil an einer anderen Stelle schon "command" benutzt wurde ist unsinnig. Nenne Sachen einfach danach was sie sind, dann ist der Code am einfachsten zu verstehen. Und wenn beides Anweisungen sind, dann hast du eben zweimal ein "command".
Kommt vielleicht von der Mathematik... je kürzer desto besser

.
phonebook_load(phonebook) finde ich einfach erdrückend

. Aber dies lässt sich mit find/replace schnell lösen =).
Zu "person_info": in Zeile 39 behauptest du, dass es eine Person ist. Daher verstehe ich nicht von welchen Hauptdict-Key(?) du das unterscheiden möchtest.
Das Phonebook ist folgendermassen aufgebaut:
Code: Alles auswählen
phonebook = {
Person1:{
Name:Smith,
Tel.:987987},
Person2:{
Name:Jackson,
Tel.:234754}
}
Hauptdict-keys:
Person1, Person2 usw.
Unterdict-keys:
Name, Tel., usw.