我有一些这样的口述:
list1 = [
dict(RL = 'rl1',
shaders = [dict(shader = "shader1", geom = ['a1','b1']),
dict(shader = "shader2", geom = ['a2','b2'])]),
dict(RL = 'rl3',
shaders = [dict(shader = "shader1", geom = ['c','d']),...])
]
list2 = [
dict(RL = 'rl1',
shaders = [dict(shader = "shader1", geom = ['p1','q1']),
dict(shader = "shader3", geom = ['p3','q3'])]),
dict(RL = 'rl2',
shaders = [dict(shader = "shader1", geom = ['c','d']),...])
]
所以这是一个dict列表,其中每个dict都有一个包含dict列表的值。
我知道这并不是有史以来最好的数据结构,但现在改变它将是相当耗时的。我想通过它们的RL值来连接所有这些列表,然后如果着色器值相同,将geom列表连接在一起。
例如,对于上面的列表,假设只有我写下的条目,我会得到具有相同renderlayer rl1、相同着色器shader1的新列表,geom将是['a','b','c','d']
谢谢你的帮助
编辑:承认我可以改变这个糟糕的数据结构,我应该使用什么样的结构来让事情变得更简单?我唯一想要的是保持层次结构:一个RL可以包含许多着色器,其中可以包含许多geom,而且我可以有许多这样的条目。在
坚持你的数据结构,我得到了这个。。。在
这看起来很疯狂,当然还有更有效的方法,但也许它会帮到你。在
编辑:对于您的编辑,除非有什么理由将所有这些列表分开,否则您最终希望将它们合并起来,这表明从一开始就可以更容易地维护所需的结构。在
像是。。。在
^{pr2}$使检查渲染层中的着色器更容易(而不是迭代,而是哈希表查找)。在
每当你想创建一个全新的列表对象时,只需在上面的映射中附加或创建适当的通道。在
如果您需要为每个着色器维护更多的信息,而不仅仅是
"geom"
,那么我将转到另一个dict,如这样。。。在同样,作为一个样式点,使用kwarg dict创建是非常没有用的,所以我将传递一个iterable的键值元组,比如
dict([('RL', 'rl1'), ('shader', 'shader1')])
,或者像我以前一样使用{}
语法。在哇。。。天哪。。。很抱歉你的咆哮。在
相关问题 更多 >
编程相关推荐