Kiểu dictionary biểu diễn một ánh xạ quan hệ giữa một khóa và một giá trị. Mỗi dictionary sẽ bao gồm danh sách của các cặp khóa và giá trị. Mỗi khóa được liên kết với một giá trị cụ thể và chúng ta có thể truy xuất giá trị cụ thể này dựa trên khóa của nó.
Các tính chất của kiểu dữ liệu từ điển trong Python:
Không có thứ tự: Các phần tử trong từ điển được
lưu trữ dưới dạng key-value
và chúng không có thứ tự hay
không được đánh chỉ số lần lượt từ 0 đến n. Tính chất này giống tính
chất của kiểu dữ liệu tập hợp set.
Tính duy nhất: Như đã nói ở trên, mỗi giá trị sẽ tương ứng với một khóa và khóa này phải là duy nhất để tránh nhầm lẫn khi truy cập các giá trị. Nếu chúng ta cố tình lưu một giá trị với 1 khóa đã có trước đó, thì giá trị gần nhất của dữ liệu sẽ được thay thế vào giá trị cũ.
Có thể thay đổi được: Kiểu từ điển có thể thay đổi được giá trị trong nó cũng như cho phép thêm và xóa các phần tử một cách dễ dàng.
a = {}
print(a)
## {}
a = {100: 'Hundred', 200: 'Two Hundred', 300: 'Three Hundred'}
print(a)
## {100: 'Hundred', 200: 'Two Hundred', 300: 'Three Hundred'}
a = {'Ten': 'Nam', 'ID': [1, 3]}
print(a)
## {'Ten': 'Nam', 'ID': [1, 3]}
a = dict({100: 'Hundred', 200: 'Two Hundred'})
print(a)
## {100: 'Hundred', 200: 'Two Hundred'}
Lưu ý:
Các giá trị (value) trong cặp key:value có thể nhận bất cứ kiểu dữ liệu nào, cũng có thể trùng nhau, nhưng
Khóa trong từ điển phải là duy nhất và phải thuộc kiểu dữ liệu bất biến như chuỗi ký tự, số, hay tuples.
Như ở trên đã nói, kiểu từ điển dictionary không có thứ tự nhưng lại có chỉ số là các khóa. Do đó, Chúng ta sẽ có hai cách để truy cập một phần tử trong dictionary:
Lấy giá trị (value
) của phần tử sử dụng khóa
(key
) đặt trong cặp dấu ngoặc vuông
[]
Lấy giá trị tương ứng với khóa bằng cách truyền khóa vào như tham
số của phương thức get get()
.
Nếu chúng ta sử dụng dấu ngoặc vuông, một lỗi KeyError
sẽ xuất hiện trong trường hợp không tìm thấy khóa trong đối tượng kiểu
từ điển. Ngược lại, phương thức get()
sẽ trả về giá trị
None
nếu không tìm thấy khóa chứ không báo lỗi.
a = {100: 'Hundred', 200: 'Two Hundred', 300:"Three Hundred"}
print(a[100])
## Hundred
print(a.get(200))
## Two Hundred
print(a.get(400))
## None
person = {'name': 'Phill', 'age': 22}
print('Name: ', person.get('name'))
## Name: Phill
print('Age: ', person.get('age'))
## Age: 22
print('Salary: ', person.get('salary'))
## Salary: None
print('Salary: ', person.get('salary', 0.0))
## Salary: 0.0
Để xác định số phần tử có trong đối tượng từ điển, chúng ta có thể sử
dụng hàm len()
. Điều này giống với các kiểu dữ liệu dạng
tập hợp khác như list, tuple hay set.
person = {"name": "Nam", "country": "Viet Nam", "telephone": 123456789}
print(len(person))
## 3
Hàm max()
và min()
sẽ trả về các khóa có
giá trị lớn nhất và nhỏ nhất tương ứng trong tập hợp từ điển.
dict = {1:'aaa',2:'bbb',3:'AAA', 4:'CC'}
print('Maximum Key',max(dict))
## Maximum Key 4
print('Minimum Key',min(dict))
## Minimum Key 1
Hàm max() và min() không xem xét độ lớn của các giá trị mà chỉ xem xét khóa!
Khi các khóa có kiểu dữ liệu hỗn hợp, ví dụ cả chuỗi ký tự và số, thì chương trình sẽ báo lỗi:
#dict = {1:'aaa',"2":'bbb',3:'AAA'}
#print('Maximum Key',max(dict))
#print('Minimum Key',min(dict))
Khi hàm all()
được sử dụng với tập hợp từ điển, giá trị
trả về sẽ là True
trong trường hợp tất cả các khóa là
True
và False
trong trường hợp ngược lại.
Một số điều cần lưu ý ở đây là:
Chỉ các giá trị khóa phải là True
Các giá trị khóa có thể là True
hoặc 1
hoặc ‘0
’
0
và False
trong khóa sẽ trả về
False
Từ điển rỗng sẽ trả về giá trị là True
.
dict1 = {1:'True',1:'False'}
dict2 = {0:'True',1:'False'}
dict3= {}
dict4 = {'0':False}
print(all(dict1))
## True
print(all(dict2))
## False
print(all(dict3))
## True
print(all(dict4))
## True
Hàm any()
hoạt động tương tự như hàm any()
trong kiểu list, tuple và set. Tuy nhiên khác biệt duy nhất đó là hàm
này xem xét các giá trị của khóa trong tử điển.
dict1 = {1:'True',1:'False'}
dict2 = {0:'True',1:'False'}
dict3= {}
dict4 = {'0':False}
dict5 = {0:False}
print(any(dict1))
## True
print(any(dict2))
## True
print(any(dict3))
## False
print(any(dict4))
## True
print(any(dict5))
## False
Chúng ta có hai thao tác chủ yếu đó là thêm hoặc thay đổi giá trị cho một phần tử, và đương nhiên để thay đổi thì ta phải biết tên key.
my_dict = {'name':'Jack', 'age': 26}
my_dict['age'] = 27
print(my_dict)
## {'name': 'Jack', 'age': 27}
my_dict['address'] = 'Downtown'
print(my_dict)
## {'name': 'Jack', 'age': 27, 'address': 'Downtown'}
Chúng ta có thể xóa một phần tử ra khỏi dictionary bằng cách sử dụng
phương thức pop()
, tham số truyền vào là tên key cần xóa,
kết quả trả về là giá trị của phần tử đã xóa.
Hoặc sử dụng phương thức popitem()
để xóa phần tử ra
khỏi dictionary và kết quả trả về là cặp giá trị
(key, value)
đã xóa, và sử dụng phương thức
clear()
để xóa toàn bộ phần tử.
squares = {1:1, 2:4, 3:9, 4:16, 5:25}
print(squares.pop(4))
## 16
print(squares)
## {1: 1, 2: 4, 3: 9, 5: 25}
print(squares.popitem())
## (5, 25)
print(squares)
## {1: 1, 2: 4, 3: 9}
del squares[1]
# Xóa biến squares ra khỏi bộ nhớ
del squares
squares = {1:1, 2:4, 3:9, 4:16, 5:25}
squares[1] = squares[1]*2
squares[2] = squares[2]*2
squares[3] = squares[3]*2
squares[4] = squares[4]*2
#Output: {1: 2, 2: 8, 3: 18, 4: 32, 5: 25}
print(squares)
## {1: 2, 2: 8, 3: 18, 4: 32, 5: 25}
a_dict = {'color': 'blue', 'fruit': 'apple', 'pet': 'dog'}
for key in a_dict:
print(key)
## color
## fruit
## pet
a_dict = {'color': 'blue', 'fruit': 'apple', 'pet': 'dog'}
for key in a_dict:
print(key, '->', a_dict[key])
## color -> blue
## fruit -> apple
## pet -> dog
a_dict = {'color': 'blue', 'fruit': 'apple', 'pet': 'dog'}
d_items = a_dict.items()
d_items # Here d_items is a view of items
## dict_items([('color', 'blue'), ('fruit', 'apple'), ('pet', 'dog')])
for item in a_dict.items():
print(item)
## ('color', 'blue')
## ('fruit', 'apple')
## ('pet', 'dog')
for key, value in a_dict.items():
print(key, '->', value)
## color -> blue
## fruit -> apple
## pet -> dog
for key in a_dict.keys():
print(key)
## color
## fruit
## pet
for key in a_dict.keys():
print(key, '->', a_dict[key])
## color -> blue
## fruit -> apple
## pet -> dog
for value in a_dict.values():
print(value)
## blue
## apple
## dog
#a_dict = {'color': 'blue', 'fruit': 'apple', 'pet': 'dog'}
#'pet' in a_dict.keys()
prices = {'apple': 0.40, 'orange': 0.35, 'banana': 0.25}
for key in list(prices.keys()): # Use a list instead of a view
if key == 'orange':
del prices[key] # Delete a key from prices
print(prices)
## {'apple': 0.4, 'banana': 0.25}
Cho trước tập hợp A là một tập hợp bao gồm các số nguyên, số thực và xâu ký tự. Hãy viết chương trình đếm số phần tử là số nguyên, số thập phân và xâu ký tự của tập hợp A.
Hãy viết chương trình thực hiện các nội dung sau:
• Viết chương trình nhập vào một số nguyên dương n.
• Hãy tạo ra hai tập hợp A và B thỏa mãn điều kiện: Tập A là tập hợp gồm các số nguyên tố và đồng thời là ước số của n; B là tập hợp gồm các số nguyên tố nhỏ hơn n và không phải ước số của n.
Nhập $N = 5$
mydict ={1:1, 2:4, 3:9: 4:16, 5:25)
Cho hai danh sách khác nhau gồm n phần tử nhập vào từ bàn phím. \(a_{0},a_{1},...,a_{n-1}\)và danh sách thứ hai bao gồm \(b_{0},b_{1},...,b_{n-1}\) Tạo ra một từ điển mydict mà key của mydict là các giá trị trong véc tơ a, còn value của mydict là giá trị trong véc tơ b.
Thống kê điểm thi: Hãy viết chương trình trong Python sử dụng kiến thức về từ điển nhập thông tin của học sinh, bao gồm: Điểm, tên của học sinh và lưu thông tin này trong một từ điển gọi là myclass.
Điểm sẽ thuộc trong tập hợp 0,1,2,…,10.
Tên là một chuỗi ký tự nhập vào
Yêu cầu: Thống kê số học sinh được điểm 10, điểm 9, điểm 8.…
Sử dụng từ điển làm bài tập sau:
Nhập vào một nội dung một chuỗi ký tự bao gồm ký tự số và ký tự chữ. Đếm số chữ cái và chữ số trong chuỗi đó.
Input: Python@123
Output:
Số ký tự chữ: 6
Số ký tự là số: 3
Đọc, dịch sang tiếng Việt và làm lại bài tập sau theo hướng dẫn: