Ich erhalte eine solche Liste

selection= [u'pSphereShape1', u'mesh', u'pSphereShape2', u'mesh', u'nurbsCircleShape1', u'nurbsCurve']

Also myDic (Auswahl)

def myDic(self,selObjects):
    print "Recieved ",selObjects
    print "Length ", len(selObjects)
    self.objDic={}
    for index,each in enumerate(reversed(selObjects)):

        print index,each
        if index%2==0:
            key=each
        elif index % 2!=0:
            value=each
            self.objDic[key]=value
            #self.objDic.update({key:value})
        print "Yo",self.objDic, len(self.objDic)

Dies fügt zwar Werte hinzu, aber nach dem ersten Eintrag überschreibt der nächste den vorhandenen ersten Eintrag ... und das gesamte Element im Wörterbuch ist nur einer und das ist der erste Eintrag ...

Wie soll ich das Wörterbuch füllen, damit jeder Formknoten wie pSphereShape1 oder pSphereShape1 zum Schlüssel wird und Mesh oder Mesh zu seinem Wert wird ...

0
user1176501 6 Okt. 2012 im 23:10

4 Antworten

Beste Antwort

Alles in Ordnung, ich habe es selbst behoben, als ich mit dem Modul-Operationsschlüssel nachgesehen habe, sollte es dort sein, wo der Wert ist

def myDic(self,selObjects):
        print "Recieved ",selObjects
        print "Length ", len(selObjects)
        #self.objDic={}
        for index,each in enumerate(reversed(selObjects)):
            ##print index,each
            if index%2==0:
                value=each
            elif index % 2!=0:
                key=each
                self.objDic[key]=value
                #self.objDic.update({key:value})
        print self.objDic, len(self.objDic)

Dieser obige Code generiert ein Schlüsselwertpaar aus der Liste ...

0
user1176501 6 Okt. 2012 im 19:34

Das self.objdict ist nicht gut platziert, da hier Folgendes funktionieren könnte:

def myDic(self,selObjects):
    print "Recieved ",selObjects
    print "Length ", len(selObjects)
    self.objDic={} # dict mus be over here or else it is overwrited to empty in every loop
    for index,each in enumerate(reversed(selObjects)):
        print index,each
        if index%2==0:
            key=each
        elif index % 2!=0:
            value=each
            self.objDic[key]=value
            #self.objDic.update({key:value})
        print "Yo",self.objDic, len(self.objDic)
1
Netwave 6 Okt. 2012 im 19:15

Benutze das; Es klappt.

def funct(selObjects):
    print "Recieved ",selObjects
    print "Length ", len(selObjects)
    self.objDic={}

    for index,each in enumerate((selObjects)):
        print index,each
        if index%2==0:
            key=each
        elif index % 2!=0:
            value=each
            objDic[key]=value
        #self.objDic.update({key:value})
        print "Yo",objDic, len(objDic)
0
AbdulFattah Popoola 6 Okt. 2012 im 19:40

Der Hauptgrund ist, dass Sie self.objDict in jedem Schritt neu definieren, wodurch alle vorherigen Werte gelöscht werden. Versuchen Sie als ersten Schritt, diese Definition über die for - Schleife zu verschieben.

Sie sind sich nicht sicher, welche Python-Version Sie verwenden, aber Sie können das Wörterbuch auch mit einem Verständnis füllen (> = 2.7):

pairs = zip(selObjects[0::2], selObjects[1::2])
self.objDict = {k: v for pair in pairs}

Entschuldigung, wenn dies nicht funktioniert - ich kann es momentan nicht testen :) Die Idee ist, eine Liste von Tupeln zu erstellen, die den Schlüssel und den Wert für Ihr Diktat enthalten, und dann das Wörterbuch daraus zu erstellen.

In Python <2.6 sollte dies funktionieren (mit pairs von oben):

self.objDict = dict((k, v) for pair in pairs)
1
RocketDonkey 6 Okt. 2012 im 19:36