13

所以我正在玩弄让自己(当然还有任何喜欢使用它的人)在 Python 中为 Pygame 制作一个小样板库的想法。我想要一个系统,其中应用程序的设置随 yaml 文件一起提供。

因此,我认为如果库提供默认的 yaml 树并将其与用户提供的树合并,将会很有用。为了可用性起见,我想知道是否有任何人可以预测一个例程,其中:

在树中用户提供的 yaml 与默认值重叠的任何情况下,用户提供的分支都会替换库提供的分支。

在用户提供的 yaml 不与默认树重叠的任何情况下,默认树仍然存在。

附加用户提供的 yaml 提供的树中的任何多余分支。

我知道这个解释很冗长,因为我的要求可能很清楚。我想知道免费获得是否有点多。

4

1 回答 1

21

您可以使用PyYAML解析文件,然后使用以下函数合并两棵树:

def merge(user, default):
    if isinstance(user,dict) and isinstance(default,dict):
        for k,v in default.iteritems():
            if k not in user:
                user[k] = v
            else:
                user[k] = merge(user[k],v)
    return user

或者,您可以在调用此函数之前对用户树进行深度复制

于 2009-05-05T03:46:17.600 回答