文章内容

2018/10/22 18:10:10,作 者: 黄兵

python Dictionary 附加相关问题

最近需要父子查询,使用的是python 中的字典(Dictonary),形如:{'id':1,'name':x,'item':{'id',1,'name':x,'id':2,'name':y,...}},需要附加字符串,使用update无法实现,需要研究其他方法。

以下是未成品源代码:

@manage.route('/ajax_get_material', methods=['GET', 'POST'])
@login_required
def ajax_get_material():
    # get material classification id
    global get_id
    get_id = request.values.get('get_id', 0)
    # if data is None,get default data is first data.
    if get_id is None:
        get_id = MaterialClassification.query.order_by(MaterialClassification.classification_since).first().id

    get_catalog = ClassificationCatalog.query.filter_by(classification_id=get_id).first()
    global item_str
    get_material_item = MaterialItem.query.filter_by(i_catalog_id=get_catalog.id)
    # {'id':1,'name':x,'item':{'id',1,'name':x,'id':2,'name':y,...}}
    dict_item = {'id': get_catalog.id, 'name': get_catalog.catalog_name,'items': {'id': get_material_item.i_id, 'item_name': get_material_item.i_name}}
    # TODO:Assemble json data.
    for item in get_material_item:
        item_str = {'id': item.i_id, 'item_name': item.i_name}
    dict_item = {'id': get_catalog.id, 'name': get_catalog.catalog_name,
                 'items': {item_str}}
    return jsonify()

研究一下能否实现,同时需要注意键不能相同的问题。

2018年10月23日更新:

研究了一上午终于把问题给解决了,最后代码如下:

@manage.route('/ajax_get_material', methods=['GET', 'POST'])
@login_required
def ajax_get_material():
    # get material classification id
    global get_id
    get_id = request.values.get('get_id', 0)
    # if data is None,get default data is first data.
    if get_id is None:
        get_id = MaterialClassification.query.order_by(MaterialClassification.classification_since).first().id

    get_catalog = ClassificationCatalog.query.filter_by(classification_id=get_id).first()
    get_material_item = MaterialItem.query.filter_by(i_catalog_id=get_catalog.id)
    # {'id':1,'name':x,'item':{'id',1,'name':x,'id':2,'name':y,...}}
    dict_item = {'id': get_catalog.id, 'name': get_catalog.catalog_name}
    # TODO:Assemble json data.
    for item in get_material_item:
        dict_item.setdefault('item', []).append({'id': item.i_id, 'item_name': item.i_name})
    print(dict_item)
    return jsonify(dict_item)

输入结果:

{'id': 5, 'name': '黑色及有色金属', 'item': [{'id': 2, 'item_name': '钢丝'}, {'id': 3, 'item_name': '钢丝绳'}, {'id': 4, 'item_name': '圆钢'}, {'id': 5, 'item_name': '方钢'}, {'id': 6, 'item_name': '钢筋'}]}

输入json之后的结果:

正好满足上面的要求,自此问题解决。

有什么问题欢迎下面留言。


参考资料:字典中的键映射多个值


黄兵个人博客原创。

转载请注明出处:黄兵个人博客 - python Dictionary 附加相关问题

分享到:

发表评论

评论列表