與您的數據結構的堅持,我得到這個...
list1 = [dict(RL = 'rl1', shaders = [dict(shader = "shader1", geom = ['a','b']),
dict(shader = "shader3", geom = ['q','p'])])]
list2 = [dict(RL = 'rl1', shaders = [dict(shader = "shader1", geom = ['c','d']),
dict(shader = "shader3", geom = ['x','y'])])]
list3 = [dict(RL = 'rl1', shaders = [dict(shader = "shader2", geom = ['e','f'])])]
list4 = [dict(RL = 'rl2', shaders = [dict(shader = "shader2", geom = ['g','h'])])]
list5 = [dict(RL = 'rl2', shaders = [dict(shader = "shader2", geom = ['i','j'])]),
dict(RL = 'rl3', shaders = [dict(shader = "shader4", geom = ['ab','cd'])])]
list_o_lists = [list1, list2, list3, list4, list5]
big_list_o_dicts = []
for x in list_o_lists:
big_list_o_dicts.extend(x)
big_list_o_dicts.sort(key=lambda x: x['RL'])
new_list_o_lists = []
last_item = None
for item in big_list_o_dicts:
if last_item and item['RL'] == last_item['RL']:
for this_shader in item['shaders']:
for last_shader in last_item['shaders']:
if last_shader['shader'] == this_shader['shader']:
last_shader['geom'].extend(this_shader['geom'])
break
else:
last_item = item
new_list_o_lists.append(last_item)
它看起來瘋狂,肯定有更有效的辦法,但也許它會幫助你。
編輯:在回答您的編輯,除非有一些理由讓所有這些名單分開,你的最終願望,他們都結合起來表明,它會更容易維護,你從一開始就想要的結構。
喜歡的東西...
rl_shader_map = {
'rl1': {
'shader1': ['a', 'b', 'c', 'd'],
'shader2': ['e', 'f'],
},
'rl2': {
'shader2': ['g', 'h', 'i', 'j']
}
}
使得檢查在渲染層更容易(而不是迭代,這是一個哈希表查找)的着色器。
每當您創建一個全新的列表對象時,只需在上面的地圖中追加或創建相應的頻道即可。
如果您需要維護的不僅僅是"geom"
每個着色器的詳細信息,然後我會移動到像這樣字典另一...
rl_shader_map = {
'rl1': {
'shader1': {
'geom': ['a', 'b', 'c', 'd'],
}
'shader2': {
'geom': ['e', 'f'],
}
},
'rl2': {
'shader2': {
'geom': ['g', 'h', 'i', 'j'],
}
}
}
而且,只是作爲一個風格上看,使用kwarg字典創造是相當未用的AFAIK,所以我會傳遞一個鍵值元組iterable如dict([('RL', 'rl1'), ('shader', 'shader1')])
或使用{}
語法,因爲我已經完成了。
哇......聖潔的廢話......抱歉的咆哮。
這裏粘貼的代碼不是Python。改正你的數據結構 – Boud
'='在字典中? –
好吧我只是太急於寫好它......當我使用dict()命令時,我使用了等號。對不起,我糾正了它 –