簡體   English   中英

使用來自預先存在的嵌套字典的數據創建嵌套字典

[英]Creating a nested dictionary with data from pre-existing nested dictionary

我需要創建一個字典,其鍵是唯一的課程代碼,其值是具有單個鍵值對的字典,按字母順序描述可用於該課程代碼的部分,以及屬於特定部分的 ID 號,按升序排列。

數據來自名為 student_data 的字典,如下所示:

student_data[:3]

>>>[{'enlistment': [{'course code': 'UK 60', 'section': 'A'}, 
{'course code': 'GF 24', 'section': 'B'}, 
{'course code': 'ME 40', 'section': 'B'}, 
{'course code': 'VY 44', 'section': 'D'}, 
{'course code': 'EN 94', 'section': 'B'}], 
'id': '201001', 'paid': True, 'school': 'SOSE', 'year level': 2}, 
{'enlistment': [{'course code': 'EQ 61', 'section': 'D'}, 
{'course code': 'UZ 22', 'section': 'B'}, 
{'course code': 'KS 36', 'section': 'B'}, 
{'course code': 'VH 63', 'section': 'A'}, 
{'course code': 'IW 81', 'section': 'C'}], 
'id': '211002', 'paid': True, 'school': 'JGSOM', 'year level': 1}, 
{'enlistment': [{'course code': 'WE 15', 'section': 'D'}, 
{'course code': 'ZP 68', 'section': 'A'}, 
{'course code': 'GI 78', 'section': 'A'}, 
{'course code': 'GK 72', 'section': 'C'}, 
{'course code': 'FA 24', 'section': 'D'}, 
{'course code': 'UJ 28', 'section': 'A'}], 
'id': '201003', 'paid': True, 'school': 'JGSOM', 'year level': 2}]

所需輸出的格式:

{
    course_code: [{
        "section": section_letter,
        "class list": [
           id_number_1,
           id_number_2,
           id_number_3,
        ]
    }
    course_code: [{
        "section": section_letter,
        "class list": [
           id_number_1,
           id_number_2,
           id_number_3,
        ]
    }
]
}

我真的不擅長 Python 中的字典,因為我還不太了解它。 請幫忙。

您可以使用collections.defaultdict

from collections import defaultdict
d = defaultdict(dict)
student_data = [{'enlistment': [{'course code': 'UK 60', 'section': 'A'}, {'course code': 'GF 24', 'section': 'B'}, {'course code': 'ME 40', 'section': 'B'}, {'course code': 'VY 44', 'section': 'D'}, {'course code': 'EN 94', 'section': 'B'}], 'id': '201001', 'paid': True, 'school': 'SOSE', 'year level': 2}, {'enlistment': [{'course code': 'EQ 61', 'section': 'D'}, {'course code': 'UZ 22', 'section': 'B'}, {'course code': 'KS 36', 'section': 'B'}, {'course code': 'VH 63', 'section': 'A'}, {'course code': 'IW 81', 'section': 'C'}], 'id': '211002', 'paid': True, 'school': 'JGSOM', 'year level': 1}, {'enlistment': [{'course code': 'WE 15', 'section': 'D'}, {'course code': 'ZP 68', 'section': 'A'}, {'course code': 'GI 78', 'section': 'A'}, {'course code': 'GK 72', 'section': 'C'}, {'course code': 'FA 24', 'section': 'D'}, {'course code': 'UJ 28', 'section': 'A'}], 'id': '201003', 'paid': True, 'school': 'JGSOM', 'year level': 2}]
for i in student_data:
   for c in i['enlistment']:
      if c['section'] in d[c['course code']]:
          d[c['course code']][c['section']].append(i['id'])
      else:
          d[c['course code']][c['section']] = [i['id']]

r = {a:[{'section':c, 'class list':d} for c, d in b.items()] for a, b in d.items()}

輸出:

{'UK 60': [{'section': 'A', 'class list': ['201001']}], 'GF 24': [{'section': 'B', 'class list': ['201001']}], 'ME 40': [{'section': 'B', 'class list': ['201001']}], 'VY 44': [{'section': 'D', 'class list': ['201001']}], 'EN 94': [{'section': 'B', 'class list': ['201001']}], 'EQ 61': [{'section': 'D', 'class list': ['211002']}], 'UZ 22': [{'section': 'B', 'class list': ['211002']}], 'KS 36': [{'section': 'B', 'class list': ['211002']}], 'VH 63': [{'section': 'A', 'class list': ['211002']}], 'IW 81': [{'section': 'C', 'class list': ['211002']}], 'WE 15': [{'section': 'D', 'class list': ['201003']}], 'ZP 68': [{'section': 'A', 'class list': ['201003']}], 'GI 78': [{'section': 'A', 'class list': ['201003']}], 'GK 72': [{'section': 'C', 'class list': ['201003']}], 'FA 24': [{'section': 'D', 'class list': ['201003']}], 'UJ 28': [{'section': 'A', 'class list': ['201003']}]}

好,我來教你python中的字典是什么。 它們是具有{key:value, key:value}語法的無序數據集,所有鍵都需要彼此不同。 換句話說,Key 必須是唯一的。 說,你有一本字典, d = {1:"XYZ", 2:"WER"} 1 和 2 是鍵,而 "XYZ" 和 "WER" 是各自的值

因此,如果您想獲取任何鍵的數據,只需鍵入 d[key],例如 d[1]。 您將得到“XYZ”作為答案 如果您不知道密鑰,只需鍵入d.keys() 它將打印所有鍵,然后使用循環

for i in d.keys():
        print(d[i])

即使您不知道密鑰,這也會為您提供所有值...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM