0

我收到这样的清单

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

所以myDic(选择)

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)

这确实添加了值,但是在第一个条目之后,下一个条目会覆盖现有的第一个条目......并且字典中的总项目只有一个,那就是第一个条目......

我应该如何填充字典,以便像 pSphereShape1 或 pSphereShape1 这样的每个形状节点成为键,而网格或网格分别成为它的值......

4

4 回答 4

1

self.objdict 的位置不合适,这样做可能会起作用:

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)
于 2012-10-06T19:15:45.030 回答
1

主要原因是您self.objDict在每一步都重新定义,这会删除所有以前的值。作为第一步,尝试将该定义移到for循环上方。

不确定您使用的是 Python 上的哪个版本,但您也可以使用理解 (>= 2.7) 填充字典:

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

抱歉,如果这不起作用 - 我目前无法对其进行测试:) 这个想法是创建一个包含您的字典的键和值的元组列表,然后从中创建字典。

在 Python < 2.6 中,这应该可以工作(pairs从上面使用):

self.objDict = dict((k, v) for pair in pairs)
于 2012-10-06T19:36:55.870 回答
0

好吧,我自己修好了,实际上当我用模数运算键检查时,应该是值所在的位置

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)

上面的代码从列表中生成键值对...

于 2012-10-06T19:34:05.427 回答
0

用这个; 有用。

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)
于 2012-10-06T19:40:23.853 回答