python递归函数和返回非可变字典

时间:2012-12-31 16:21:44

标签: python recursion dictionary hdf5 h5py

我正在尝试使函数VisitAllObjects接受不同的文件并返回一个字典。但我目前指的是同一个名字?因此,一旦运行了gdata,fdata就会更改为gdata。我如何才能使其fdata和gdata等同于他们的gh5文件中的尊重数据?

f = h5py.File('testfile.gh5', 'r')
g = h5py.File('testfile2.gh5', 'r')

def VisitAllObjects(Group,Path, FileInfo=None):
    if FileInfo is None:
        FileInfo = {}
    for i in Group.items():
        if isinstance(i[1], h5py.Group):
            VisitAllObjects(i[1], Path + '/' + i[0])
        else:
            DatasetName = Path + '/' + i[0]
            FileInfo[DatasetName] = (Group[DatasetName].shape, Group[DatasetName].dtype)
    return FileInfo

fdata = VisitAllObjects(f,'')
gdata = VisitAllObjects(g,'')

在你的帮助下,在调用visit_all_objects时添加了file_info,我能够让它工作。如果您发现有任何问题请告诉我,我仍然需要检查更多,但使用fdata和gdata返回不同的数据,fdata is gdata是假的。感谢。

我得到了以下内容:

def visit_all_objects(Group,Path, file_info=None):
    if file_info is None:
        file_info = {}
    for i in Group.items():
        if isinstance(i[1], h5py.Group):
            visit_all_objects(i[1], Path + '/' + i[0], file_info)
        else:
            DatasetName = Path + '/' + i[0]
            file_info[DatasetName] = (Group[DatasetName].shape, Group[DatasetName].dtype)
    return file_info

1 个答案:

答案 0 :(得分:0)

而不是改变字典,尝试制作一个新的字典,并改变它。您可以在处理FileInfo = FileInfo.copy()的情况后立即将FileInfo is None放在函数顶部附近。