Iterate OrderedDict [closed]

问题描述 投票:-1回答:1

我有一个将值添加到OrderedDict的循环:

Table SyTree:

id |名称|如此可见| parent_id

1 |目录| [null] |真| 0

362 |衣服10 |真实| 1

54 |盘子| 20 |真实| 1

.......

2 | new_year_pr | 160 |真实| 1

340 | new_year_package | 0 |真实| 2

338 | new_year_off | 0 |真实| 2

子类别的

即,parent_id与需要挂钩的类别的id匹配。我为地图(站点树)全部完成]

qs_catalog_items = SyTree.objects.filter(visible=True).order_by('parent_id', 'so')

od = OrderedDict()

for obj in qs_catalog_items:
    if obj.parent_id in od:
        od[obj.parent_id].items.append(obj)
    else:
        obj.items = []
        od[obj.id] = obj

[请告诉我如何迭代(并打印)它,以使每个OD元素中都有一个list类型的属性。

python ordereddictionary
1个回答
0
投票
from collections import OrderedDict

records = [ { 'id': 1 ,  'name': 'catalog' ,  'visible': True,  'parent':0 },
            { 'id': 362 ,  'name': 'clothes' ,  'visible': True ,   'parent':1 },
            { 'id': 54 ,  'name': 'plates' ,  'visible': True ,  'parent': 1 },
            { 'id': 2 ,  'name': 'new_year_pr' ,  'visible': True ,  'parent': 1 },
            { 'id': 340 ,  'name': 'new_year_package' ,  'visible': True ,   'parent': 2 },
            { 'id': 338 ,  'name': 'new_year_off' ,  'visible': True ,  'parent': 2 } ]

result = OrderedDict()

for record in records:
    if record['parent'] in result.keys():
        # If 'parent' already created append the new record.
        result[ record['parent'] ].append( record )
    else:
        # Otherwise create the dict entry with the a list as the value.
        result[ record[ 'parent'] ] = [ record ]

for key, rec in result.items():
    print(key, rec)

# 0 [{'id': 1, 'name': 'catalog', 'visible': True, 'parent': 0}]
# 1 [{'id': 362, 'name': 'clothes', 'visible': True, 'parent': 1}, 
#    {'id': 54, 'name': 'plates', 'visible': True, 'parent': 1}, 
#    {'id': 2, 'name': 'new_year_pr', 'visible': True, 'parent': 1}]
# 2 [{'id': 340, 'name': 'new_year_package', 'visible': True, 'parent': 2},
#    {'id': 338, 'name': 'new_year_off', 'visible': True, 'parent': 2}]
© www.soinside.com 2019 - 2024. All rights reserved.