Как добавить словарь в словарь в Python 3+? - PullRequest
0 голосов
/ 27 февраля 2020

Моя цель состоит в том, чтобы получить ответ, похожий на следующий:

{
 "modules": [
    {
        "id": 1,
        "modulename": "Dashboard",
        "order": 1,
        "defaultModule": true,
        "isSelected": false
    },{},{}....
]
"menuItems": [
    {
        "id": 30,
        "order": 0,
        "module": 5,
        "roleName": null,
        "name": "Controls Overivew",
        "pagetitle": "Contorls View",
        "enabled": true,
        "isexternal": false,
        "url": "",
        "apppath": "/criticalcontrols/criticalcontrols",
        "icon": "nav-icon icon-energy",
        "isDefault": true
    },{},{}...
]
}

В настоящее время со следующим я получаю только одно значение из content

 cursor.execute("SQL_QUERY_HERE")
    rv1 = cursor.fetchall()
    #payload = [] # List
    content = {} # Dict
    data = {}
    for r in rv1:
        content = { 
                    "id": r["id"], 
                    "name": r["name"], 
                    "pagetitle": r["pagetitle"], 
                    "order": r["order"], 
                    "module": r["module"], 
                    "enabled": "true" if r["enabled"] ==  "b'\x01'" else "false", 
                    "isexternal": "true" if r["isexternal"] == "b'\x01'" else "false", 
                    "url": r["url"], 
                    "apppath": r["apppath"], 
                    "icon": r["icon"], 
                    "isDefault": "true" if r["isDefault"] == "b'\x01'" else "false"
        }
        #payload.append(content)
        data["modules"] = [content]
        content = {}



    cursor.execute("SQL_QUERY_HERE")
    rv2 = cursor.fetchall()
    for r in rv2:
        content = { 
                    "id": r["id"],
                    "modulename": r["modulename"],
                    "order": r["order"],
                    "defaultModule": "true" if r["defaultModule"] == "b'\x01'" else "false",
                    "isSelected": "true" if r["enabled"] == "b'\x01'" else "false"
        }
        #payload.append(content)
        data["menuItems"] = [content]
        content = {}

    resp = jsonify(data)

, что-то вроде одной записи для modules и одной для menuItems

1 Ответ

1 голос
/ 27 февраля 2020

Ваша проблема в том, что вы перезаписываете данные ["модули"] каждым анализируемым модулем. Попробуйте следующее:

cursor.execute("SQL_QUERY_HERE")
rv1 = cursor.fetchall()
#payload = [] # List
content = {} # Dict
data = {}
for r in rv1:
    content = { 
                "id": r["id"], 
                "name": r["name"], 
                "pagetitle": r["pagetitle"], 
                "order": r["order"], 
                "module": r["module"], 
                "enabled": "true" if r["enabled"] ==  "b'\x01'" else "false", 
                "isexternal": "true" if r["isexternal"] == "b'\x01'" else "false", 
                "url": r["url"], 
                "apppath": r["apppath"], 
                "icon": r["icon"], 
                "isDefault": "true" if r["isDefault"] == "b'\x01'" else "false"
    }
    #payload.append(content)
    data["modules"] = data.get("modules", [])  # if modules is not defined, get an empty list
    data["modules"].append(content)
    content = {}

cursor.execute("SQL_QUERY_HERE")
rv2 = cursor.fetchall()
for r in rv2:
    content = { 
                "id": r["id"],
                "modulename": r["modulename"],
                "order": r["order"],
                "defaultModule": "true" if r["defaultModule"] == "b'\x01'" else "false",
                "isSelected": "true" if r["enabled"] == "b'\x01'" else "false"
    }
    #payload.append(content)
    data["menuItems"] = data.get("menuItems", [])  # if menuItems is not defined, get an empty list
    data["menuItems"].append(content)
    content = {}

resp = jsonify(data)

Важно помнить о вложенных структурах: данные - это словарь, содержащий списки словарей, поэтому данные - это слово, data ["modules") - список ( и поэтому вы добавляете элементы, используя append), а data ["modules"] [0] снова представляет собой словарь, в котором вы можете найти нужные определения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...