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 に答える