Yaml在Python中合并

13 python configuration yaml

因此,我正在考虑让自己(以及任何关心使用它的人当然)在Python中用于Pygame的一个小样板文库.我想要一个系统,其中应用程序的设置与yaml文件一起提供.

所以我认为如果库提供了一个默认的yaml树并将其与用户提供的树合并它将会很有用.为了实用起见,我想知道是否有可能在那里有一个例程:

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

在用户提供的yaml不与默认树重叠的任何情况下,默认树都会保留.

由用户提供的yaml提供的树中的任何超级分支都被附加.

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

Mar*_*rot 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
Run Code Online (Sandbox Code Playgroud)

或者,您可以在调用此函数之前执行用户树的深层复制.

  • 非常好,谢谢!虽然它错过了数组之间的合并:如果一个键有[1,2]而另一个键有[2,3],那么合并的元素应该有[1,2,3].我错了吗? (2认同)