Python在循环中追加字典

时间:2016-06-13 15:44:56

标签: python dictionary

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

<local:Tab1 TabText="{Binding SomeProperty}"/>

如果我为一个数据文件调用此函数,我可能会:

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,但是,数据文件很大,需要一段时间。是否有更快的方法来附加词典,同时仍然允许访问各个值?

1 个答案:

答案 0 :(得分: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'])

这将生成您可以轻松索引的预期列表

顺便说一下,你的代码不起作用,因为没有为dicts定义set_default这样的方法。你可能意味着setdefault,它可以做你想要的。