NOT von einer Values() im Form einer Liste

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

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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

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

HIlfe !!! :shock:
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
joost
gelöscht
Beiträge: 134
Registriert: Sonntag 29. April 2007, 13:28

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.
[color=green][size=75]Never use idle.pyw, if you need sys.stdin[/size][/color]
Antworten