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:
Laufen über alle Elemente einer Liste:
Und das Invertieren macht man schön über eine Funktion:
Vielleicht brauchst du noch das Prüfen, ob ein Element in einer Liste vorhanden ist:
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 !!!
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:
wobei natürlich die Frage ist, inwieweit Du den ganzen Aufbau von ConvertedValue brauchst.