【发布时间】:2021-07-01 16:41:19
【问题描述】:
我正在使用 python 2.7。我有一个输入是字典列表。在我的系统中,用户可以添加宏类别。此宏类别可以包含 0 个或多个类别。而宏类所包含的类,可以包含0个或多个微类。宏观类别、类别和微观类别是独一无二的。输入的字典列表已经先按宏分类,后按分类,最后按微分类。
input = [{
'desc_category': 'category1',
'desc_macrocategory': 'macrocategory1',
'desc_microcategory': 'microcategory1',
'id_category': '1',
'id_macrocategory': '1',
'id_microcategory': '1',
},
{
'desc_category': 'category2',
'desc_macrocategory': 'macrocategory1',
'desc_microcategory': None,
'id_category': '2',
'id_macrocategory': '1',
'id_microcategory': '0',
},
{
'desc_category': 'category5',
'desc_macrocategory': 'macrocategory1',
'desc_microcategory': None,
'id_category': '5',
'id_macrocategory': '1',
'id_microcategory': '0',
},
{
'desc_category': 'category21',
'desc_macrocategory': 'macrocategory2',
'desc_microcategory': None,
'id_category': '21',
'id_macrocategory': '2',
'id_microcategory': '0',
},
{
'desc_category': 'category28',
'desc_macrocategory': 'macrocategory2',
'desc_microcategory': None,
'id_category': '28',
'id_macrocategory': '2',
'id_microcategory': '0',
},
{
'desc_category': 'category31',
'desc_macrocategory': 'macrocategory3',
'desc_microcategory': 'microcategory71',
'id_category': '31',
'id_macrocategory': '3',
'id_microcategory': '71',
},
{
'desc_category': 'category31',
'desc_macrocategory': 'macrocategory3',
'desc_microcategory': 'microcategory72',
'id_category': '31',
'id_macrocategory': '3',
'id_microcategory': '72',
},
{
'desc_category': None,
'desc_macrocategory': 'macrocategory4',
'desc_microcategory': None,
'id_category': '0',
'id_macrocategory': '4',
'id_microcategory': '0',
}
]
输出必须是:
output = [
{ 'desc_macrocategory': 'macrocategory1',
'id_macrocategory': 1,
'categories': [
{ 'desc_category': 'category1',
'id_category': 1,
'microcategories': [
{ 'desc_microcategory': 'microcategory1',
'id_microcategory': 1
}
]
},
{ 'desc_category': 'category2',
'id_category': 2,
'microcategories': []
},
{ 'desc_category': 'category5',
'id_category': 5,
'microcategories': []
}
]
},
{ 'desc_macrocategory': 'macrocategory2',
'id_macrocategory': 2,
'categories': [
{ 'desc_category': 'category21',
'id_category': 21,
'microcategories': []
},
{ 'desc_category': 'category28',
'id_category': 28,
'microcategories': []
}
]
},
{ 'desc_macrocategory': 'macrocategory3',
'id_macrocategory': 3,
'categories': [
{ 'desc_category': 'category31',
'id_category': 31,
'microcategories': [
{ 'desc_microcategory': 'microcategory71',
'id_microcategory': 71
},
{ 'desc_microcategory': 'microcategory72',
'id_microcategory': 72
}
]
}
]
},
{ 'desc_macrocategory': 'macrocategory4',
'id_macrocategory': 4,
'categories': []
}
]
我试过这个,但结果不正确,我不知道问题出在哪里。或者如果有更好的方法来获得想要的结果:
output=[]
macrocategory = '-'
category = '-'
d_macro = {}
d_category = {}
l_cat = []
l_mic = []
for dict_info in input:
if macrocategory != int(dict_info['id_macrocategory']):
macrocategory = int(dict_info['id_macrocategory'])
category = '-'
if d_macro:
d_category.update({'microcategories': l_mic})
if d_category['id_category'] != 0:
l_cat.append(d_category)
d_category = {}
d_macro.update({'categories': l_cat})
d_attributes['macro_categories'].append(d_macro)
l_cat = []
l_mic = []
d_macro = {
'id_macrocategory': int(dict_info['id_macrocategory']),
'desc_macrocategory': dict_info['desc_macrocategory'],
'categories': []
}
if category != int(dict_info['id_category']):
category = int(dict_info['id_category'])
if d_category:
d_category.update({'microcategories': l_mic})
if d_category['id_category'] != 0:
l_cat.append(d_category)
l_mic = []
d_category = {
'id_category': int(dict_info['id_category']),
'desc_category': dict_info['desc_category'],
'microcategories': []
}
d_micro = {
'id_microcategory': int(dict_info['id_microcategory']),
'desc_microcategory': dict_info['desc_microcategory'],
}
if d_micro['id_microcategory'] != 0:
l_mic.append(d_micro)
# for the last one
d_category.update({'microcategories': l_mic})
d_macro.update({'categories': l_cat})
output.append(d_macro)
我不明白为什么我在输出中丢失了信息(结果没有显示所有类别)。
【问题讨论】:
-
如果您还不知道,Python 2 的所有版本都是deprecated as of January 1st, 2020 并且将不再获得支持或安全更新。强烈建议您尽可能迁移到 Python 3。
-
macrocategory 和 microcategory 给出 unboundlocalerror,赋值前引用
-
是的,谢谢,但我在 2.7 中需要它
-
是的,对不起。我已经插入了丢失的部分代码
-
我可以把 tools.dump2 和 d_attributes (undefined) 注释掉吗?
标签: python list python-2.7 dictionary