0%

Python 的 字典

什麼是字典?

字典和 list 類似,不同的是字典不會用[1]、[100]這種 index 來選擇項目。
字典是一個 key(鍵)-value(值) 的數據類型,每個 key 都是獨一無二

1
student ={
2
    'stud0001':'Mike',
3
    'stud0002':'Jenny',
4
    'stud0003':'Tom',
5
    'stud0004':'Bob',
6
}
7
print(student)
8
9
---------------執行結果---------------
10
{'stud0001': 'Mike', 'stud0003': 'Tom', 'stud0002': 'Jenny', 'stud0004': 'Bob'}

嗯? 怎麼沒有按照順序?
因為字典是不在乎項目的順序,不像 list 有[0]、[1]……的順序。

字典取值

我們可以用 key 來找 value

方法一: [key]

1
student ={
2
    'stud0001':'Mike',
3
    'stud0002':'Jenny',
4
    'stud0003':'Tom',
5
    'stud0004':'Bob',
6
}
7
8
print(student)
9
print(student['stud0001'])
10
print(student['stdu0005'])
11
12
---------------執行結果---------------
13
{'stud0001': 'Mike', 'stud0002': 'Jenny', 'stud0003': 'Tom', 'stud0004': 'Bob'}
14
Mike
15
16
    print(student['stdu0005'])
17
KeyError: 'stdu0005'

因為字典裡面沒有’stdu0005’所以python就會報錯。

方法二: .get(key)

1
student ={
2
    'stud0001':'Mike',
3
    'stud0002':'Jenny',
4
    'stud0003':'Tom',
5
    'stud0004':'Bob',
6
}
7
8
print(student)
9
print(student.get('stud0001'))
10
print(student.get('stud0005'))
11
12
---------------執行結果---------------
13
{'stud0001': 'Mike', 'stud0002': 'Jenny', 'stud0003': 'Tom', 'stud0004': 'Bob'}
14
Mike
15
None

相較於方法一,.get(key)找不到時不會報錯,而是會回傳None

如果我們想知道所有 key 有什麼,可以使用 .keys()

1
student ={
2
    'stud0001':'Mike',
3
    'stud0002':'Jenny',
4
    'stud0003':'Tom',
5
    'stud0004':'Bob',
6
}
7
8
print(student.keys())
9
10
---------------執行結果---------------
11
dict_keys(['stud0001', 'stud0002', 'stud0003', 'stud0004'])

那全部的 value 呢? 則使用 .values()

1
student ={
2
    'stud0001':'Mike',
3
    'stud0002':'Jenny',
4
    'stud0003':'Tom',
5
    'stud0004':'Bob',
6
}
7
8
print(student.values())
9
10
---------------執行結果---------------
11
dict_values(['Mike', 'Jenny', 'Tom', 'Bob'])

字典輸入

假如又多了一個學生,我們該怎麼加進 student 這個字典呢?
我們可以直接用 dict[key] = value
當 key 存在時,舊的 value 會被 新的覆蓋。
當 key 不存在時,會建立一個新的。

1
student ={
2
    'stud0001':'Mike',
3
    'stud0002':'Jenny',
4
    'stud0003':'Tom',
5
    'stud0004':'Bob',
6
}
7
print(student)
8
9
student['stud0001'] = 'Jake'
10
student['stud0005'] = 'Lulu'
11
print(student)
12
13
---------------執行結果---------------
14
{'stud0001': 'Mike', 'stud0002': 'Jenny', 'stud0003': 'Tom', 'stud0004': 'Bob'}
15
{'stud0001': 'Jake', 'stud0002': 'Jenny', 'stud0003': 'Tom', 'stud0004': 'Bob', 'stud0005': 'Lulu'}

student因為原本沒有’stud0005’,所以新增了 Lulu。

字典刪除

刪除字典的項目有三種方法:

  1. del: Python 內建的通用刪除方法。

    del dict[key]

1
student ={
2
    'stud0001':'Mike',
3
    'stud0002':'Jenny',
4
    'stud0003':'Tom',
5
    'stud0004':'Bob',
6
}
7
8
del student['stud0001']
9
10
print(student)
11
12
---------------執行結果---------------
13
{'stud0002': 'Jenny', 'stud0003': 'Tom', 'stud0004': 'Bob'}
  1. dict.pop()

    dict.pop(key)

    1
    student ={
    2
        'stud0001':'Mike',
    3
        'stud0002':'Jenny',
    4
        'stud0003':'Tom',
    5
        'stud0004':'Bob',
    6
    }
    7
    8
    student.pop('stud0001') # 一定要指定一個key,不指定就會報錯
    9
    10
    print(student)
    11
    ---------------執行結果---------------
    12
    {'stud0002': 'Jenny', 'stud0003': 'Tom', 'stud0004': 'Bob'}
  2. dict.popitem

    dict.popitem() 沒有key隨機刪除

    1
    student ={
    2
        'stud0001':'Mike',
    3
        'stud0002':'Jenny',
    4
        'stud0003':'Tom',
    5
        'stud0004':'Bob',
    6
    }
    7
    8
    student.popitem()
    9
    10
    print(student)
    11
    ---------------執行結果---------------
    12
    {'stud0001': 'Mike', 'stud0002': 'Jenny', 'stud0003': 'Tom'}

字典測試

如果不確定 這個 key 是否存在,我們可以使用 in

1
student ={
2
    'stud0001':'Mike',
3
    'stud0002':'Jenny',
4
    'stud0003':'Tom',
5
    'stud0004':'Bob',
6
}
7
8
print(student)
9
print('stud0001' in student)
10
print('stud0005' in student)
11
12
---------------執行結果---------------
13
{'stud0001': 'Mike', 'stud0002': 'Jenny', 'stud0003': 'Tom', 'stud0004': 'Bob'}
14
True
15
False

字典 Update

我們可以使用 .update() 來更新我們的字典

1
student ={
2
    'stud0001':'Mike',
3
    'stud0002':'Jenny',
4
    'stud0003':'Tom',
5
    'stud0004':'Bob',
6
}
7
8
new_stduent={
9
    'stud0001':'Jack',
10
    'stud0005':'Curry',
11
}
12
13
student.update(new_stduent)
14
print(student)
15
16
---------------執行結果---------------
17
{'stud0001': 'Jack', 'stud0002': 'Jenny', 'stud0003': 'Tom', 'stud0004': 'Bob', 'stud0005': 'Curry'}

student、new_student 都有 ‘stud001’ 這個 key,所以 student 原來的 value 就被覆蓋,
而 student 原本沒有 ‘stud0005’ 所以被建立了。

字典 print

1
student ={
2
    'stud0001':'Mike',
3
    'stud0002':'Jenny',
4
    'stud0003':'Tom',
5
    'stud0004':'Bob',
6
}
7
8
for i in student:
9
    print(i)
10
---------------執行結果---------------
11
stud0001
12
stud0002
13
stud0003
14
stud0004

ㄜ……怎麼只有 key,那怎麼 print value?

1
student ={
2
    'stud0001':'Mike',
3
    'stud0002':'Jenny',
4
    'stud0003':'Tom',
5
    'stud0004':'Bob',
6
}
7
8
for i in student:
9
    print(i,student[i])
10
---------------執行結果---------------
11
stud0001 Mike
12
stud0002 Jenny
13
stud0003 Tom
14
stud0004 Bob

資料來源:

Python 學習筆記 系列
精通 Python:運用簡單的套件進行現代運算