Я не знаю более быстрых способов реорганизовать диктовку, чем проходить через все циклы. Я обнаружил, что если у вас действительно сложные словарные записи, вам, вероятно, следует использовать класс.
Вот небольшой фрагмент кода, чтобы сделать то, что вы просили. Он не выполняет NO_VAL, но если time_x там нет, вы можете сделать попытку, кроме KeyError, довольно легко.
#
a={'index_1':[('time_1',[ ['a',1],['b',1],['c',1] ]),('time_2',[ ['a',100],['c',100] ]),('time_3',[ ['a',200],['b',200],['c',200] ])],'index_2':[('time_1',[ ['a',1],['d',1],['c',1] ]),('time_2',[ ['a',100],['c',100] ]),('time_3',[ ['a',200],['b',200],['c',200] ])]}
d={}
for key in a.keys():
d[key]={}
for time in a[key]:
for name in time[1]:
if name[0] in d[key]:
d[key][name[0]][time[0]]=name[1]
else:
d[key][name[0]]={time[0]:name[1]}
print d
#