有没有快速的方法来修改这种字典?

时间:2011-12-22 02:20:41

标签: python parsing dictionary

我有一个这样的dict,其数据结构如下:

{'index_1':[('time_1',[ ['a',1],['b',1],['c',1] ]),
            ('time_2',[ ['a',100],['c',100] ]),
            ('time_3',[ ['a',200],['b',200],['c',200] ]),
            ('someting_time', [ ['something_name','something_val'] ... ])
           ],
 'index_2':['something same as above' ]
}

这主要是由'time_x'索引的。但我真的想将dict更改为以下样式:

{'index_1':{'a':{'time_1':1,'time_2':100,'time_3':200},
            'b':{'time_1':1,'time_2':'NO_VAL','time_3",200},
             .... 
             ....
}

有没有快速的方法来改变这种情况?我可以浏览每个列表/字典,但由于更多相同的查找操作,我必须考虑性能或良好的数据结构。

由于

1 个答案:

答案 0 :(得分:1)

我不知道有什么更快的方法来重新组织字典而不是使用循环来完成所有事情。我发现如果你有非常复杂的字典条目,你可能应该使用一个类。

这是一个快速的代码片段来执行您的要求。它不会执行'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