Seite 1 von 1

Dictionary mit mehren Keys

Verfasst: Montag 26. Juli 2010, 13:54
von p90
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

Re: Dictionary mit mehren Keys

Verfasst: Montag 26. Juli 2010, 13:57
von Rebecca
Das klingt nach einem Anwendungsfall fuer sqlite.

Re: Dictionary mit mehren Keys

Verfasst: Montag 26. Juli 2010, 14:01
von EyDu
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

Re: Dictionary mit mehren Keys

Verfasst: Mittwoch 28. Juli 2010, 10:31
von sma
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

Re: Dictionary mit mehren Keys

Verfasst: Mittwoch 28. Juli 2010, 10:42
von EyDu
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"]

Re: Dictionary mit mehren Keys

Verfasst: Mittwoch 28. Juli 2010, 10:56
von Hyperion
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.

Re: Dictionary mit mehren Keys

Verfasst: Mittwoch 28. Juli 2010, 22:15
von p90
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.