Seite 1 von 1

NOT von einer Values() im Form einer Liste

Verfasst: Donnerstag 3. Mai 2007, 12:09
von koukoun
Hallo miteinander,

ich habe eine Dict in diesem Form dict = {"a": [0, 1, 1], "b":[1, 0, 1], "c":[0, 0, 0]}.
mit der Eingabe des gewuenschten Key, will ich dessen Value invertieren: z.B. :


ConvertValues = "a" und "c"

for i in dict:
if i ==ConvertValue:
..........
.........

print dict
>>> {{"a": [1, 0, 0], "b":[1, 0, 1], "c":[1, 1, 1]}}

hat jemand eine Idee?!?1


Danke

Verfasst: Donnerstag 3. Mai 2007, 12:16
von EyDu
Ich will ja niemandem seine Hausaufgaben wegnehmen:

Iterieren über ein Dictionary:

Code: Alles auswählen

for key, value in d.iteritems():
Laufen über alle Elemente einer Liste:

Code: Alles auswählen

for elem in liste:
Und das Invertieren macht man schön über eine Funktion:

Code: Alles auswählen

def invert(x):
    if x==0:
        ...
    elif x==1:
        ...
Vielleicht brauchst du noch das Prüfen, ob ein Element in einer Liste vorhanden ist:

Code: Alles auswählen

elem in liste
Das sollte aber auch reichen.

Verfasst: Donnerstag 3. Mai 2007, 17:16
von koukoun
Hallo,
du nimmst mir keine Hausaufgaben. mit der Konvertierung habe ich schon aber das problem liegt einfach dadrin, die konvertierte Liste in der Value zu bringen.

Code: Alles auswählen

Value = {'a':[1,1,0], 'b':[0,1,0], 'c':[0,0,0] }
convertKey ='b'
aa=[]
for i in range (len(Value)):
     if Value.keys()[i]==convertKey:
          Convert = Value.values()[i]
          for n in Convert:
               Invert = not n
               aa.append(Invert)
>>> aa 
[1,0,1]
wie ueberschreibe ich die values von 'b' mit aa-Liste?!

das ist mein Problem

DAnke

Verfasst: Donnerstag 3. Mai 2007, 17:44
von koukoun
HIlfe !!! :shock:

Verfasst: Donnerstag 3. Mai 2007, 17:54
von BlackJack
Das habe ich auch gedacht als ich Deinen Quelltext angesehen habe. ;-)

Umständlicher geht's ja fast gar nicht mehr. Arbeite doch bitte erst einmal das Tutorial in der Python-Dokumentation durch. Der Hauptzweck von Dictionaries ist es schnell und direkt über einen Schlüssel auf den Wert zugreifen zu können. Und Du lässt Dir immer wieder Listen mit den Schlüsseln und Werten generieren über die Du dann mit einem Index zugreifst um so linear nach einem Schlüssel zu suchen.

Und wenn Du Quelltext und Ergebnisse zeigst, dann probiere Die am besten aus. Das Ergebnis von `aa` glaube ich nämlich nicht, es sei denn Du benutzt eine sehr alte Python-Version. Die logische Negation von 0 und 1 ergibt nämlich `True` und `False` und nicht 1 und 0:

Code: Alles auswählen

In [16]: not 0
Out[16]: True

In [17]: not 1
Out[17]: False

Verfasst: Donnerstag 3. Mai 2007, 17:58
von joost
Die Funktion Convert ginge so:

Code: Alles auswählen

def Convert(x): return int(not x)  # Python macht hier die notwendigen 
                                   # Casts (Typumwandlungen)
Für so etwas spendiere ich weder einen Funktionsaufruf (der kostet durchaus CPU-Zeit) noch eine Zeile, zu der ich im Code vielleicht zurückscrollen muss. Würde so etwas machen:

Code: Alles auswählen

ConvertedValues = {}
for k in Value.keys(): ConvertedValues[k]=[(int(not y) for y in Value[k])]
Sicher nicht die optimale Lösung. Übrigens: es geht auch mit nur einer Zuweisung (wird dann aber sehr verschachtelt). Dann einfach zuweisen:

Code: Alles auswählen

Value[b] = ConvertedValue[a]
wobei natürlich die Frage ist, inwieweit Du den ganzen Aufbau von ConvertedValue brauchst.