dynamisches dictionary

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
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

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
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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"}}
Das Leben ist wie ein Tennisball.
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

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
Antworten