0

我希望能够在可以设置的选项列表中转换字典(使用完整路径),例如这应该通过:

def test_dic_to_args(self):
    dic = {"x1": {"x2": "val1"}, "x2": "val3"}
    des = ["x1.x2:val1", "x2:val3"]
    self.assertEqual(conf.dict_to_args(dic), des)

现在我开始写它,我认为它很容易,但它比我想象的更棘手,有队列,类型检查等等。有没有聪明的方法来解决这个问题?也许最好的选择仍然是递归 DFS,你怎么看?

4

1 回答 1

6

如果字典应该是任意嵌套的,那么递归方法很可能是最简单的。

def dict_to_args(d, prefix=()):
    for k, v in d.iteritems():
        if isinstance(v, dict):
            for x in dict_to_args(v, prefix + (k,)):
                yield x
        else:
            yield ".".join(prefix + (k,)) + ":" + v

例子:

>>> list(dict_to_args(dic))
['x2:val3', 'x1.x2:val1']
于 2012-07-19T11:13:47.827 回答