2016-06-13 209 views
0

我有几个具有相同变量的netCDF数据文件。我想读取多个数据文件并将所有数据存储在一个巨大的字典中。我的代码的问题是我可以附加新的字典,但是,我不能再分离字典中的元素。例如:Python在循环中追加字典

def parseFile(file_name): 
    ret_dict = {} 
    with Dataset(file_name,'r') as fid: 
     ret_dict['time'] = list(fid.variables['time'][:]) 

如果我调用该函数的一个数据文件,我可能有:

>>> ret_dict['time'] 
[1,2,3,4] 

对第二个文件,我可能会想到:

>>> ret_dict['time'] 
[5,6,7,8] 

在循环中我想创建另一个字典的所有值:

>>> new_dict['time'] 
[1,2,3,4,5,6,7,8] 

这是我曾尝试:

new_dict = {} 
for f in file_name: 
    ret_dict = parseFile(f) 
    new_dict.setdefault('time',[]).append(ret_dict['time']) 

这产生了:

>>> new_dict['time'] 
[[1,2,3,4],[5,6,7,8]] 

>>> new_dict['time'][0] 
[1,2,3,4] 

我想:

>>> new_dict['time'][0] 
[1] 

我想到了在追加new_dict一个循环,howe数据文件很大,这需要一段时间。有没有更快的方法来追加字典,同时仍然允许访问各个值?

回答

1

你的问题是,你将列表追加到列表,创建一个嵌套列表,这不是你想要的。

>>> ls = [] 
>>> ls.append([1, 2, 3]) 
>>> ls 
[[1, 2, 3]] 
>>> ls[0] 
[1, 2, 3] 

但是,有另一种方法可以将项目添加到列表中。这就是所谓的.extend

>>> ls = [] 
>>> ls.extend([1, 2, 3]) 
>>> ls 
[1, 2, 3] 
>>> ls[0] 
1 

使用此当你添加列表,像这样:

new_dict = {} 
for f in file_name: 
    ret_dict = parseFile(f) 
    new_dict.set_default('time',[]).extend(ret_dict['time']) 

这将产生预期的列表,你可以很容易地指数

顺便说一句,你的代码将不起作用,因为没有为字典定义set_default等方法。你可能意思是setdefault,它可以做你想做的。