我有以下列表:
[
{('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')
及其值,但这不是很递归,而且通常很笨。
实施过程中我缺少什么?