Python 从queryset创建嵌套字典

Python 从queryset创建嵌套字典,python,django,Python,Django,我的queryset输出是 [{'ACCOUNT_NAME': 'MOHAMMAD FAWAD KHALID', 'ACCOUNT_SNO': 1810028081, 'ACTIVETRACKING': 1, 'CAMPAIGN_CODE': 'Testing', 'CAMPAIGN_DESCRIPTION': 'First Testing Campaign', 'CAMPAIGN_DOCS_ID': 121, 'CAMPAIGN_OBJECTIVE_ID': 2,

我的queryset输出是

[{'ACCOUNT_NAME': 'MOHAMMAD FAWAD KHALID',
  'ACCOUNT_SNO': 1810028081,
  'ACTIVETRACKING': 1,
  'CAMPAIGN_CODE': 'Testing',
  'CAMPAIGN_DESCRIPTION': 'First Testing Campaign',
  'CAMPAIGN_DOCS_ID': 121,
  'CAMPAIGN_OBJECTIVE_ID': 2,
  'CAMP_DETAIL_ID': 1462,
  'CAMP_END': datetime.datetime(2020, 2, 1, 0, 0),
  'CAMP_START': datetime.datetime(2020, 1, 1, 0, 0),
  'CUSTOMER_EMAIL': 'm.fawadkhalid@gmail.com',
  'DOCUMENT': 'App_download_urdu_1.html',
  'ID': 61,
  'ISACTIVE': 1,
  'LAST_CYCLE': '2',
  'MAILSTATUS_APP': 'D',
  'MAILSUBJECT': 'MCBAH Testing Campaign',
  'MOBILE_NO': '923000704342',
  'OBJECTIVE': 'SIP Payment',
  'TRACKINGCYCLE': 5}]
我需要将上述列表转换为以下内容:

[{'DATA': {'ACCOUNT_NAME': 'MOHAMMAD FAWAD KHALID',
       'ACCOUNT_SNO': 1810028081,
       'ACTIVETRACKING': 1,
       'CAMPAIGN_CODE': 'Testing',
       'CAMPAIGN_DESCRIPTION': 'First Testing Campaign',
       'CAMPAIGN_DOCS_ID': 121,
       'CAMPAIGN_OBJECTIVE_ID': 2,
       'CAMP_DETAIL_ID': 1462,
       'CAMP_END': datetime.datetime(2020, 2, 1, 0, 0),
       'CAMP_START': datetime.datetime(2020, 1, 1, 0, 0),
       'CUSTOMER_EMAIL': 'm.fawadkhalid@gmail.com',
       'DOCUMENT': 'App_download_urdu_1.html',
       'ISACTIVE': 1,
       'LAST_CYCLE': '2',
       'MAILSTATUS_APP': 'D',
       'MAILSUBJECT': 'MCBAH Testing Campaign',
       'MOBILE_NO': '923000704342',
       'OBJECTIVE': 'SIP Payment',
       'TRACKINGCYCLE': 5},
 'ID': 61}]
我试图将其转换为以下内容,但徒劳无功

from collections import defaultdict
qr_dict = defaultdict(list)
for qr in query_result:
    qr_dict[qr.ID].append(qr.qr)
我犯了以下错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-86-f76fa64c419a> in <module>
      3 qr_dict = defaultdict(list)
      4 for qr in query_result:
----> 5     qr_dict[qr.ID].append(qr.qr)
      6 
      7 

AttributeError: 'dict' object has no attribute 'ID'
---------------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
在里面
3 qr_dict=默认dict(列表)
4对于查询结果中的qr:
---->5 qr_dict[qr.ID]。追加(qr.qr)
6.
7.
AttributeError:“dict”对象没有属性“ID”

使用列表理解和
dict.pop

Ex:

query_result = [{'ID': 61, 'CAMP_DETAIL_ID': 1462, 'CAMP_START': datetime.datetime(2020, 1, 1, 0, 0), 'CAMP_END': datetime.datetime(2020, 2, 1, 0, 0), 'ISACTIVE': 1, 'ACTIVETRACKING': 1, 'TRACKINGCYCLE': 5, 'MAILSUBJECT': 'MCBAH Testing Campaign', 'CAMPAIGN_CODE': 'Testing', 'CAMPAIGN_DESCRIPTION': 'First Testing Campaign', 'ACCOUNT_SNO': 1810028081, 'CUSTOMER_EMAIL': 'm.fawadkhalid@gmail.com', 'MOBILE_NO': '923000704342', 'ACCOUNT_NAME': 'MOHAMMAD FAWAD KHALID', 'MAILSTATUS_APP': 'D', 'CAMPAIGN_OBJECTIVE_ID': 2, 'OBJECTIVE': 'SIP Payment', 'CAMPAIGN_DOCS_ID': 121, 'DOCUMENT': 'App_download_urdu_1.html', 'LAST_CYCLE': '2'}]
qr_dict = [{'ID':i.pop('ID'), 'data': i} for i in query_result]
[{'ID': 61,
  'data': {'ACCOUNT_NAME': 'MOHAMMAD FAWAD KHALID',
           'ACCOUNT_SNO': 1810028081,
           'ACTIVETRACKING': 1,
           'CAMPAIGN_CODE': 'Testing',
           'CAMPAIGN_DESCRIPTION': 'First Testing Campaign',
           'CAMPAIGN_DOCS_ID': 121,
           'CAMPAIGN_OBJECTIVE_ID': 2,
           'CAMP_DETAIL_ID': 1462,
           'CAMP_END': datetime.datetime(2020, 2, 1, 0, 0),
           'CAMP_START': datetime.datetime(2020, 1, 1, 0, 0),
           'CUSTOMER_EMAIL': 'm.fawadkhalid@gmail.com',
           'DOCUMENT': 'App_download_urdu_1.html',
           'ISACTIVE': 1,
           'LAST_CYCLE': '2',
           'MAILSTATUS_APP': 'D',
           'MAILSUBJECT': 'MCBAH Testing Campaign',
           'MOBILE_NO': '923000704342',
           'OBJECTIVE': 'SIP Payment',
           'TRACKINGCYCLE': 5}}]
输出:

query_result = [{'ID': 61, 'CAMP_DETAIL_ID': 1462, 'CAMP_START': datetime.datetime(2020, 1, 1, 0, 0), 'CAMP_END': datetime.datetime(2020, 2, 1, 0, 0), 'ISACTIVE': 1, 'ACTIVETRACKING': 1, 'TRACKINGCYCLE': 5, 'MAILSUBJECT': 'MCBAH Testing Campaign', 'CAMPAIGN_CODE': 'Testing', 'CAMPAIGN_DESCRIPTION': 'First Testing Campaign', 'ACCOUNT_SNO': 1810028081, 'CUSTOMER_EMAIL': 'm.fawadkhalid@gmail.com', 'MOBILE_NO': '923000704342', 'ACCOUNT_NAME': 'MOHAMMAD FAWAD KHALID', 'MAILSTATUS_APP': 'D', 'CAMPAIGN_OBJECTIVE_ID': 2, 'OBJECTIVE': 'SIP Payment', 'CAMPAIGN_DOCS_ID': 121, 'DOCUMENT': 'App_download_urdu_1.html', 'LAST_CYCLE': '2'}]
qr_dict = [{'ID':i.pop('ID'), 'data': i} for i in query_result]
[{'ID': 61,
  'data': {'ACCOUNT_NAME': 'MOHAMMAD FAWAD KHALID',
           'ACCOUNT_SNO': 1810028081,
           'ACTIVETRACKING': 1,
           'CAMPAIGN_CODE': 'Testing',
           'CAMPAIGN_DESCRIPTION': 'First Testing Campaign',
           'CAMPAIGN_DOCS_ID': 121,
           'CAMPAIGN_OBJECTIVE_ID': 2,
           'CAMP_DETAIL_ID': 1462,
           'CAMP_END': datetime.datetime(2020, 2, 1, 0, 0),
           'CAMP_START': datetime.datetime(2020, 1, 1, 0, 0),
           'CUSTOMER_EMAIL': 'm.fawadkhalid@gmail.com',
           'DOCUMENT': 'App_download_urdu_1.html',
           'ISACTIVE': 1,
           'LAST_CYCLE': '2',
           'MAILSTATUS_APP': 'D',
           'MAILSUBJECT': 'MCBAH Testing Campaign',
           'MOBILE_NO': '923000704342',
           'OBJECTIVE': 'SIP Payment',
           'TRACKINGCYCLE': 5}}]

如果
L
是您原始查询集的结果,那么我相信
[{'ID':L[0]。pop('ID',None),'DATA':L[0]}]
应该可以正常工作。我如何在一个父键下添加与ID 123相关的所有记录