Python-从其他字典列表中递归创建嵌套字典

时间:2020-02-17 17:33:57

标签: python

我有以下列表:

[
{('pct',): ([], '0.750000008089')}, 
{(u'GP',): ('balance', '')}, 
{(u'UK', u'UZ', u'UF', u'US', u'ZU'): ([], '')}, 
{(u'UK', u'UZ'): ('balance', '')}, 
{(u'UF', u'US', u'ZU'): ([], '')}, 
{(u'UF', u'US'): ('pro rata', '')}, 
{(u'ZU',): ('zero', '')}, 
{(u'UK', u'UZ'): ('zero', '')}, 
{(u'GP',): ('zero', '')}, 
{(u'GF',): ('zero', '0.249999991911')}
]

,我想创建一个嵌套字典列表,如下所示:

[
{('pct',): ([], '0.750000008089')}, 
{(u'GP',): ('balance', '')}, 
{(u'UK', u'UZ', u'UF', u'US', u'ZU'): ([
    {(u'UK', u'UZ'): ('balance', '')},
    {(u'UF', u'US', u'ZU'): ([
        {(u'UF', u'US'): ('pro rata', '')}, 
        {(u'ZU',): ('zero', '')}, 
        ], '')},
    {(u'UK', u'UZ'): ('zero', '')},
    ], '')},  
{(u'GP',): ('zero', '')}, 
{(u'GF',): ('zero', '0.249999991911')}
]

最终结果可以有任何深度。我一直在努力使用递归函数。我怀疑有一个相对简单的方法可以完成此操作。我从这里开始:

def populate_subrules(full_list, required_classes):
    for each_rule in full_list:
        this_key = each_rule.keys()[0]
        if set(this_key).issubset(set(required_classes)) and set(this_key) != set(required_classes):
            if each_rule[this_key][0] != []:
                for idx, found in enumerate(full_list):
                    if found.keys()[0] == required_classes:
                        full_list[idx][required_classes][0].append(each_rule)
                        # full_list.remove(each_rule)
            else:
                populate_subrules(full_list, this_key)
    return full_list

从该列表中删除值当然是行不通的,而且我不确定为什么还要返回full_list。最终结果有两个问题:保留了“不需要的”项目(很容易从最终列表中删除),但更重要的是,中间部分

{(u'UF', u'US', u'ZU'): ([
    {(u'UF', u'US'): ('pro rata', '')}, 
    {(u'ZU',): ('zero', '')}, 
    ], '')},

不会填充在较大的部分{(u'UK', u'UZ', u'UF', u'US', u'ZU')中。

在这一点上,我正在考虑只是在运行“递归”功能后从列表中删除“不需要的”项目,然后尝试在{(u'UK', u'UZ', u'UF', u'US', u'ZU')内替换“ UF,US”和“ ZU” (u'UF', u'US', u'ZU')及其值,但这不是很递归,而且通常很笨。

实施过程中我缺少什么?

0 个答案:

没有答案