我有几个具有相同变量的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,但是,数据文件很大,需要一段时间。是否有更快的方法来附加词典,同时仍然允许访问各个值?
答案 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
,它可以做你想要的。