一、什麼是嵌套字典
在Python中,字典是一種非常有用的數據結構。嵌套字典指的是在一個字典中嵌套另一個字典,即將一個字典作為另一個字典中的一個值。通過這種方式,我們可以實現更加複雜的數據結構,以滿足不同場景下的數據處理需求。
下面是一個簡單的嵌套字典示例:
{
'張三': {
'年齡': 18,
'性別': '男',
'學校': '清華大學'
},
'李四': {
'年齡': 20,
'性別': '女',
'學校': '北京大學'
}
}
在上面的示例中,我們將兩個人的信息存儲在同一個字典中,每個人的信息又是一個字典。這樣就可以方便地對人員信息進行管理和查詢。
二、數據分組
嵌套字典最常用的場景之一是數據分組。假如我們有一組學生信息,每個學生的信息如下:
{
'姓名': '張三',
'年齡': 18,
'班級': '一班',
'科目': '語文',
'成績': 90
}
現在我們要將這些學生按班級進行分組,可以通過以下的代碼來實現:
students = [
{'姓名': '張三', '年齡': 18, '班級': '一班', '科目': '語文', '成績': 90},
{'姓名': '李四', '年齡': 19, '班級': '一班', '科目': '語文', '成績': 95},
{'姓名': '王五', '年齡': 18, '班級': '二班', '科目': '語文', '成績': 88},
{'姓名': '張三', '年齡': 18, '班級': '一班', '科目': '數學', '成績': 80},
{'姓名': '李四', '年齡': 19, '班級': '一班', '科目': '數學', '成績': 85},
{'姓名': '王五', '年齡': 18, '班級': '二班', '科目': '數學', '成績': 78},
]
result = {}
for student in students:
class_name = student['班級']
if class_name not in result:
result[class_name] = []
result[class_name].append(student)
print(result)
上面的代碼中,我們使用字典result來保存結果,然後遍歷每個學生信息,將其按班級進行分組。如果result中不存在該班級對應的鍵,就創建一個新的列表來存儲該班級的學生信息。然後將該學生信息添加到對應的列表中。
最終的輸出結果如下:
{
'一班': [
{'姓名': '張三', '年齡': 18, '班級': '一班', '科目': '語文', '成績': 90},
{'姓名': '李四', '年齡': 19, '班級': '一班', '科目': '語文', '成績': 95},
{'姓名': '張三', '年齡': 18, '班級': '一班', '科目': '數學', '成績': 80},
{'姓名': '李四', '年齡': 19, '班級': '一班', '科目': '數學', '成績': 85},
],
'二班': [
{'姓名': '王五', '年齡': 18, '班級': '二班', '科目': '語文', '成績': 88},
{'姓名': '王五', '年齡': 18, '班級': '二班', '科目': '數學', '成績': 78},
]
}
三、數據查詢
除了進行分組,嵌套字典還可以方便地進行數據查詢。假如我們要查詢某個學生成績情況,可以使用以下代碼:
def query_score(name, subject):
for student in students:
if student['姓名'] == name and student['科目'] == subject:
return student['成績']
return None
print(query_score('張三', '語文')) # 輸出90
上面的代碼中,我們定義一個函數query_score,可以根據學生的姓名和科目查詢對應的成績。首先遍歷所有學生信息,找到姓名和科目都匹配的學生信息,然後返回其對應的成績。
四、總結
嵌套字典在Python中有着廣泛的應用場景,尤其是在數據處理方面。通過嵌套字典,我們可以方便地完成數據分組和查詢等操作,從而提高數據處理的效率和便捷性。
下面是完整的示例代碼:
students = [
{'姓名': '張三', '年齡': 18, '班級': '一班', '科目': '語文', '成績': 90},
{'姓名': '李四', '年齡': 19, '班級': '一班', '科目': '語文', '成績': 95},
{'姓名': '王五', '年齡': 18, '班級': '二班', '科目': '語文', '成績': 88},
{'姓名': '張三', '年齡': 18, '班級': '一班', '科目': '數學', '成績': 80},
{'姓名': '李四', '年齡': 19, '班級': '一班', '科目': '數學', '成績': 85},
{'姓名': '王五', '年齡': 18, '班級': '二班', '科目': '數學', '成績': 78},
]
# 分組
result = {}
for student in students:
class_name = student['班級']
if class_name not in result:
result[class_name] = []
result[class_name].append(student)
print(result)
# 查詢
def query_score(name, subject):
for student in students:
if student['姓名'] == name and student['科目'] == subject:
return student['成績']
return None
print(query_score('張三', '語文')) # 輸出90
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/229043.html