从列表值中停留在逻辑填充字典中

时间:2012-10-06 19:10:53

标签: python list dictionary

我收到这样的列表

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 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

主要原因是您在每个步骤中重新定义self.objDict,这会删除所有先前的值。首先,尝试将该定义移到for循环之上。

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

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

道歉,如果这不起作用 - 我现在无法测试它:)想法是创建一个包含dict的键和值的元组列表,然后从中创建字典。

在Python< 2.6,这应该有效(使用上面的pairs):

self.objDict = dict((k, v) for pair in pairs)

答案 2 :(得分: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)

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

答案 3 :(得分: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)