Dictionary mit mehren Keys

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
p90
User
Beiträge: 198
Registriert: Donnerstag 22. Juli 2010, 17:30

Hi,

hab ein kleines Problem und keine Ahnung wie ich es implementieren soll.
Habe Daten in dieser Form: Option1_Option2_Option3_Option4 =Wert
Dabei sind Option 1-4 jeweils Strings.
Suche nun eine Möglichkeit z.B. Option1 = Weis zu setzen und dann alle Werte die Option1 = weis haben zu ploten oder weiter zu verarbeiten.
Dabei muss nicht nur eine Option gesetzt sein, sonder z.B. auch zwei Option3 und Option4 z.B.
Insbesondere das sie nicht von "oben" also wenn O2 gesetzt ist ist auch O1 gesetzt gewählt werden sehe ich als Problem.
Ansonsten könnte ich ja einfach ein Dictionary verwenden.
Hat jemand eine Idee wie ich das hier machen kann?

MfG

p90
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Das klingt nach einem Anwendungsfall fuer sqlite.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Ich würde einfach sqlite benutzen. Da deine Daten eh in den Hauptspeicher passen, kannst du die Datenbank einfach im Hauptspeicher erzeugen.

Als Alternative einfach ein Tupel mit 5 Einträgen (o1, o2, o3, o4, value), die filter-Funktion und eine Prädikat.

Sebastian
Das Leben ist wie ein Tennisball.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ich habe das jetzt 2x gelesen und verstehe das Problem immer noch nicht. Soll das hier gehen?

Code: Alles auswählen

x["o1"] = "weiß"
assert x["o2"] == "weiß"
Soll also ein Wert unter mehr als einem Schlüssel abgelegt werden können? Das könnte man so machen:

Code: Alles auswählen

class X:
  def __init__(self): self.values = {}
  def register(self, *keys):
    h = [None]
    for k in keys: self.values[k] = h
  def __getitem__(self, key): return self.values[key][0]
  def __setitem__(self, key, value): self.values[key][0] = value
Stefan
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

sma hat geschrieben:Ich habe das jetzt 2x gelesen und verstehe das Problem immer noch nicht. Soll das hier gehen?
Ich habe es so verstanden:

Code: Alles auswählen

x[1, 1] = "11"
x[1,2] = "12"
x[2,1] = "21"

assert x[1,None] == ["11", "12"]
assert x[2,None] == ["21"]
assert x[1,2] == ["12"]
Oder eben allgemeiner:

Code: Alles auswählen

def equals(v): return lambda x: x==v
anyvalue = lambda x : True

assert x[equals(1), anyvalue] == ["11", "12"]
assert x[equals(1), equals(2)] == ["12"]
Das Leben ist wie ein Tennisball.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich habe ihn einfach so verstanden:

Code: Alles auswählen

In [1]: data = (
   ...:     ("a", "b", 42),
   ...:     ("a", None, 33),
   ...:     (None, "b", 69)
   ...: )

In [4]: print filter(lambda x: x[0] == "a" and x[1] == "b", data)
------> print(filter(lambda x: x[0] == "a" and x[1] == "b", data))
(('a', 'b', 42),)

In [5]: print filter(lambda x: x[0] == "a" or x[1] == "b", data)
------> print(filter(lambda x: x[0] == "a" or x[1] == "b", data))
(('a', 'b', 42), ('a', None, 33), (None, 'b', 69))

Aber die Beschreibung ist schon wenig präzise, da gebe ich sma recht.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
p90
User
Beiträge: 198
Registriert: Donnerstag 22. Juli 2010, 17:30

Hi,

wenn ich das richtig sehe meine ich es genauso wie Hyperion nur das ich nicht immer gleich viele Optionen habe.
Sqlite ist denke ich genau das richtige.
Antworten