如何制作嵌套字典并动态附加数据

noo*_*kie 5 python dictionary nested maya

我有一个循环给我三个变量

matteGroup
matteName
object
Run Code Online (Sandbox Code Playgroud)

我想做一个嵌套的dicionary保存所有数据,如:

dictionary{matteGroup: {matteName: obj1, obj2, ob3} }
Run Code Online (Sandbox Code Playgroud)

我正在逐个检查对象,所以我想创建matteGroup它,如果它不存在,创建matteName它,如果它不exixst,然后创建或追加对象的名称.我尝试了许多解决方案,如普通字典,defaultdict和我在网上找到的一些自定义类,但我无法正常完成.我有一个很好的嵌套我无法追加,反之亦然.

这是循环

    dizGroup = {}
    dizName = {}

    for obj in mc.ls(type='transform'):
        if mc.objExists(obj + ('.matteGroup')):
            matteGroup = mc.getAttr(obj + ('.matteGroup'))
            matteName = mc.getAttr(obj + ('.matteName'))

            if matteGroup not in dizGroup:
                dizGroup[matteGroup] = list()
            dizGroup[matteGroup].append(matteName)

            if matteName not in dizName:
                dizName[matteName] = list()
            dizName[matteName].append(obj)
Run Code Online (Sandbox Code Playgroud)

有了这个,我分别得到了两本词典,但不是那么有用!任何提示?

谢谢

NPE*_*NPE 7

只要我正确理解了您的要求:

In [25]: from collections import defaultdict

In [26]: d = defaultdict(lambda: defaultdict(list))

In [30]: for group, name, obj in [('g1','n1','o1'),('g1','n2','o2'),('g1','n1','o3'),('g2','n1','o4')]:
   ....:     d[group][name].append(obj)
Run Code Online (Sandbox Code Playgroud)


bpg*_*rgo 4

尝试这样的事情

dizGroup = {}

for obj in mc.ls(type='transform'):
    if mc.objExists(obj + ('.matteGroup')):
        matteGroup = mc.getAttr(obj + ('.matteGroup'))
        matteName = mc.getAttr(obj + ('.matteName'))

        if matteGroup not in dizGroup:
            dizGroup[matteGroup] = {}

        if matteName not in dizGroup[matteGroup]:
            dizGroup[matteGroup][matteName] = []

        dizGroup[matteGroup][matteName].append(obj)
Run Code Online (Sandbox Code Playgroud)