schwierigkeit bei Dict-Erstellung

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.
koukoun
User
Beiträge: 27
Registriert: Freitag 27. April 2007, 15:55

Montag 14. Mai 2007, 13:56

a {"aa": [0,1,1,1], "bb":[1,1,1,0],...}

List_min = [0,0]
List_max = [1,1]

dict = {}
.......

hier wir auf die Values aus a zugegriffen. dict will ich ertellen.
dict ist abhaengig von die values aus a:

dict sollte so aussehen :


dict = {"aa":[[0,0],[1,1],[1,1],[1,1]], "bb":[[1,1][1,1][1,1][0,0]]}

jedes einzelne Value-Objekt aus a wird abgefragt ob das 1 oder 0 ist.

ich habe Problem mit der Bildung von dict in das gewuenschte Form.

Hat jemand ne Idee?!

Danke
BlackJack

Montag 14. Mai 2007, 14:22

Falls es nicht darauf ankommt, dass die wertegleichen zweielementigen Listen nicht die gleiche Identität haben:

Code: Alles auswählen

def main():
    a = {'aa': [0, 1, 1, 1], "bb": [1, 1, 1, 0]}
    result = dict((key, [[item, item] for item in value])
                  for key, value in a.iteritems())
    print result
koukoun
User
Beiträge: 27
Registriert: Freitag 27. April 2007, 15:55

Montag 14. Mai 2007, 14:39

dict sollte so gebildet sein, dass keys aus a uebernommen werden aber die values (if ==0) dann

List_min wird als Element in dict['aa']....-Liste geschrieben

if==1
List_max wird dann in dict['aa']....-Liste geschrieben

dict = {"aa":[[0,0] """das ist List_min""", [1,1]"""List_max""", ....], "bb":...}

d.h. das kommt drauf an wie ich List_min und List_max definiere. das ist mein Prblem.
BlackJack

Montag 14. Mai 2007, 14:47

Also kommt es darauf an, dass die Listen die selbe Identität haben und nicht nur die entsprechenden Werte enthalten!?

Code: Alles auswählen

def main():
    min_max = ([0, 0], [1, 1])
    result = dict((key, [min_max[item] for item in value])
                  for key, value in a.iteritems())
    print result
koukoun
User
Beiträge: 27
Registriert: Freitag 27. April 2007, 15:55

Montag 14. Mai 2007, 14:57

ja genau... wie ich sehe, verwendest du
for item in value

die Funktion sollte in der Lage sein, nur die einzelne Elemente zu ersetzen und nicht nach Gleichheit fragen, denn min_max koennte auch sein:
min_max =([0.2, 1.12], [7.2, 18]). in diesem Fall sollte der Value-Element aus a in [0.2,1.12] in dict ersetzt werden


aber ich bekomme immer einen Syntax-Fehler beim Ausfuehren.
funktionert diese Funktion bei dir?!

Code: Alles auswählen

def main():
    min_max = ([0, 0], [1, 1])
    result = dict((key, [min_max[item] for item in value])
                  for key, value in a.iteritems())
    print result
EDIT(jens): Code in PY-Tags gesetzt. Bitte: http://www.python-forum.de/faq.php#21 beachten!
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Montag 14. Mai 2007, 15:19

Hab noch nicht ganz gecheckt was das ganze genau werden soll,
aber kann es sein das du ein solches Ergebnis suchst?

Code: Alles auswählen

>>> def main():
...     a = {'aa': [0, 1, 1, 1], "bb": [1, 1, 1, 0]}
...     min_max = ([0, 0], [1, 1])
...     result = dict((key, [min_max[item] for item in value])
...                   for key, value in a.iteritems())
...     print result
...
>>> main()
{'aa': [[0, 0], [1, 1], [1, 1], [1, 1]], 'bb': [[1, 1], [1, 1], [1, 1], [0, 0]]}
koukoun
User
Beiträge: 27
Registriert: Freitag 27. April 2007, 15:55

Montag 14. Mai 2007, 15:33

Hallo,

das ist einfach nicht zufassen..ich hab 100% denselben Code aber immer noch habe ich einen Syntax-Error.
BlackJack

Montag 14. Mai 2007, 15:39

Kann es ein dass Du eine ältere Python-Version benutzt die noch keine Generator-Ausdrücke kennt? Falls ja, versuch's mal damit:

Code: Alles auswählen

def main():
    a = {'aa': [0, 1, 1, 1], "bb": [1, 1, 1, 0]}
    min_max = ([0, 0], [1, 1])
    result = dict([(key, [min_max[item] for item in value])
                   for key, value in a.iteritems()])
    print result
koukoun
User
Beiträge: 27
Registriert: Freitag 27. April 2007, 15:55

Montag 14. Mai 2007, 15:43

ich habe Python 2.2

jetzt habe ich keinen Syntax Fehler mehr aber

TypeError: 'dict' object is not callable
BlackJack

Montag 14. Mai 2007, 16:12

Hast Du zufällig irgendwo den Namen `dict` umdefiniert?

2.2 ist aber schon sehr alt. 2.2.3 ist vor vier Jahren herausgekommen.
koukoun
User
Beiträge: 27
Registriert: Freitag 27. April 2007, 15:55

Montag 14. Mai 2007, 16:17

ja ich weiss. Das Tool gehoert dem Unternehmen wo ich meine DA schreibe. leider kann ich nichts aendern.

Ich versuche momentan mit den ueblichen Methoden (for, if.... ) mein Ziel zu erreichen.

hast du irgendne Idee wie man das machen kann ohne die Generator-Ausdruecke zu benutzen?
Benutzeravatar
sunmountain
User
Beiträge: 89
Registriert: Montag 13. März 2006, 17:18

Montag 14. Mai 2007, 16:45

koukoun hat geschrieben:hast du irgendne Idee wie man das machen kann ohne die Generator-Ausdruecke zu benutzen?
Listcomprehension ?
Sieht fast genauso aus, nur die Klammern sind eckig ;-)
BlackJack

Montag 14. Mai 2007, 16:52

Das haben wir ja schon versucht. Das ist nicht das Problem.

@koukoun: Du hast höchstwahrscheinlich den Namen `dict` an etwas anderes als die Funktion gebunden.

Der Code müsste auch in der 2.2 gehen:

http://www.python.org/doc/2.2.3/lib/built-in-funcs.html
koukoun
User
Beiträge: 27
Registriert: Freitag 27. April 2007, 15:55

Montag 14. Mai 2007, 21:07

Hey, danke Leute

ich hab den Fehler gefunden. dict ist bei mir in einem alten Skript initialisiert worden. das alte skprit habe ich vormittag aufgerufen und ausgefuehrt. :oops:
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 15. Mai 2007, 06:27

Mit einem help(dict) hättest du das auch ausfinden können ;)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten