Seite 1 von 1

dynamisches dictionary

Verfasst: Montag 10. Januar 2011, 14:11
von feldmaus
Hi Leute,

lange ist es her, das mir BlackJack & Co KG hier geholfen hatten :-). Vielen Dank nochmal.

Ich mache gerade ein Skript zum sichern/wiederherstellen/synchronisieren meines Debian Mint Systems. Die Dateien/Ordner definiere ich in einem Dictionary. Zur Vereinfachung wollte ich in diesem dict eine Variable namens BENUTZER verwenden, um verschiedene HOME-Verzeichnisse zu definieren.

Code: Alles auswählen

#!/usr/bin/python

BENUTZER='markus'

dict={'benutzer':['markus', 'bernard'], 'home':'/home/'+BENUTZER}
for benutzer in dict['benutzer']:
    print dict['home']
Im Prinzip weiß ich das es so wie ich es gerne hätte nicht geht. Mit einer Klasse 'Dictionary' wäre das auf jeden Fall möglich, aber das wäre wie mit Kanonen auf Spatzen schießen. Hat da Jemand einen eleganteren Weg für mich?

Und wenn ich mein dict update, dann würde sich mein Programm Code fast verdoppeln.

Grüße Markus

Re: dynamisches dictionary

Verfasst: Montag 10. Januar 2011, 14:19
von Hyperion
Ich sehe da nicht so wirklich das Problem. Wenn sich das home-Verzeichnis immer nach der Regel "/home/" + Benutzername bilden lässt, musst Du diese Info doch nicht speichern, sondern kannst sie "berechnen" für die Stellen, an denen Du sie brauchst:

Code: Alles auswählen

def homify(username):
    return os.path.join("/home", username)
Ansonsten könntest Du eine Klasse implementieren, in der "home" eine Property ist, die analog mittels os.path.join() aus einer weiteren user-Property den Pfad zusammenbaut.

Code: Alles auswählen

class User(object):

    def __init__(self, name):
        self.name = name

    @property
    def path(self):
        return os.path.join("/home", self.name)
Kleine Anmerkung: "dict" ist ein Built-in, welches Du nicht überschreiben solltest!

Re: dynamisches dictionary

Verfasst: Montag 10. Januar 2011, 16:28
von EyDu
Vielleicht stolpert man auch darüber, dass man über alle Elemente aus "dict" iteriert und diese an den Namen "benutzer" bindet. Das könnte darauf schließen lassen, was man in das Dictionary packen und wie man es nennen sollte ;-)

Code: Alles auswählen

users = {"markus":{"home":"/home/markus"}, "bernard":{"home":"/home/spamandeggs"}}

Re: dynamisches dictionary

Verfasst: Dienstag 11. Januar 2011, 18:33
von feldmaus
Ich habe es jetzt so gelöst, dass ich die Strings in der Schleife zusammensetze und dabei den Benutzernamen miteinbeziehe. Vielen Dank für Eure Anregungen.

Grüße Markus