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 ...
4 Antworten
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 ...
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)
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)
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)
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.