Dictionary trong Python
Python cũng cấp một kiểu dũ liệu tổng hợp nữa là
dictionary
, tương tự như danh sách trong đó nó là một tập các đối tượng.Các tính chất của kiểu dữ liệu dictionary
Xác định một dictionary
Một từ điển trong python bao gồm một tập hợp các
key: value
(khóa và giá trị). các cặp được phân tách bằng dấu phẩy đặt trong dấu ngoặc nhọn ({}
).dict_a = {
<key> : <value>,
<key_2> : <value_2>,
......
<key_n> : <value_n>
}
Chúng ta có thể xây dựng kiểu
dictionary
bằng hàm dict()
. Đối số của dict()
phải là một chuỗi các cặp key-value
như sau:>>> a = [('a', 1), ('b', 2), ('c', 3)]
>>> dict(a)
{'a': 1, 'b': 2, 'c': 3}
# Hoặc
>>> a = dict('a'=1, 'b'=2, 'c'=3)
>>> a
{'a': 1, 'b': 2, 'c': 3}
Truy cập các giá trị của dictionary
- Chúng ta có thể truy cập được giá trị của
dictionary
bằng từ khóa (key
) tương ứng với giá trị đó (value
) trong ngoặc vuông ([]
)
>>> a = {'a': 1, 'b': 2, 'c': 3}
>>> a['a']
1
>>> a['c']
3
- Nếu bạn đưa ra một từ khóa không tồn tại trong
dictionary
sẽ tạo ra một ngoại lệ.
>>> a = {'a': 1, 'b': 2, 'c': 3}
>>> a['d']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'd'
- Thêm một mục vào
dictionary
hiện có bằng cách gán một khóa mới và giá trị mới.
>>> a = {'a': 1, 'b': 2, 'c': 3}
>>> a['d'] = 4
>>> a
{'a': 1, 'b': 2, 'c': 3, 'd':4}
- Bạn có thể sửa đổi
dictionary
hiện tại bằng cách gán giá trị mới cho khóa hiện có.
>>> a = {'a': 1, 'b': 2, 'c': 3, 'd':4}
>>> a['d'] = 5
>>> a
{'a': 1, 'b': 2, 'c': 3, 'd':5}
- Để xóa một mục, sử dụng câu lệnh
del
và chỉ định khóa cần xóa.
>>> a = {'a': 1, 'b': 2, 'c': 3, 'd':4}
>>> del a['d']
>>> a
{'a': 1, 'b': 2, 'c': 3}
-
Dictionary
có thể chứadictionary
gọi làdictionary
lồng nhau.
>>> a = {'a': 1, 'b': 2, 'c': 3, 'd':{1: 'a', '2': b}}
>>> a
{'a': 1, 'b': 2, 'c': 3, 'd':{1: 'a', '2': b}}
Khóa trong Dictionary
Hầu hết các loại giá trị đều có thể sử dụng làm khóa
dictionary
trong Python.>>> a = { 1: 'a', 2.5: 'b', True: 'c'}
>>> a
{ 1: 'a', 2.5: 'b', True: 'c'}
# Sử dụng key với int, float, boolean
Thậm chí có thể sử dụng các đối tượng tích hợp như
type
và function
>>> a = { int: 1, float: 2, bool : 3}
>>> a
#{<class 'int'>: 1, <class 'float'>: 2, <class 'bool'>: 3}
>>> a[float]
2
>>> d = { bin : 1 , hex : 2 , oct : 3 }
>>> d [ oct ]
3
Tuy nhiên, càn lưu ý một số điều đối với việc đặt
key
dictionary
:- Một
key
phải là duy nhất trongdictionary
, không thể bị trùng lặp. Nếu bạn chỉ định khóa trùng với khóa đã có thì cặpkey:value
đầu tiên sẽ bị ghi đè.
>>> a = {'a': 1, 'b': 2, 'c': 3, 'd':4, 'a':5}
>>> a
{'a': 5, 'b': 2, 'c': 3, 'd': 4}
Key
củadictionary
phải là loại immutable nhưinteger
,float
,string
,boolean
hoặc có thể làtuple
. Tuy nhiênlist
vàdict
khác không thể dùng để làm khóa vì chúng có thể thay đổi giá trị.
>>> a = { 'hello': 1, True: 2, (1, 2) : 3}
>>> a
{'hello': 1, True: 2, (1, 2): 3}
>>> a = {[1, 2, 3 ]: 1, float: 2, bool : 3}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
Value trong dictionary
Ngược lại với
key
, value
trong dictionary không có hạn chế nào cả. Nó có thể là bất kì loại đối tượng nào mà Python hỗ trọ, và một giá trị có thể xuất hiện nhiều lần.>>> d = { 0 : 'a', 1 : 'a', 2 : 'a', 3 : 'a'}
>>> d
{0: 'a', 1: 'a', 2: ' a ', 3:' a '}
>>> d [ 0 ] == d [ 1 ] == d [ 2 ]
True
Toán tử trong dictionary
- Toán tử
in
hoặcnot in
Chúng ta có thể sử dụng toán tử
in
hoặc not in
trong dictionary để trả về True
hoặc False
để xác định xem một khóa có tồn tại trong từ điển hay không.>>> d = { 0 : 'a', 1 : 'a', 2 : 'a', 3 : 'a'}
>>> 0 in d
True
>>> 4 in d
False
- Toán tử
==
và!=
>>> a = {'a': 1, 'b': 2}
>>> b = {'a': 1, 'b': 2}
>>> a == b
True
>>> a != b
False
Các phương thức tính hợp sẵn của kiểu dữ liệu dictionary
Phương thức | Miêu tả |
---|---|
dict.clear() | Loại bỏ tất cả các phần tử của dictionary |
dict.copy() | Trả về một bản sao của từ điển |
dict.fromkeys(seq[, v]) | Trả về một dictionary mới với các key từ seq và value bằng v , mặc định là None |
dict.get(key[,d]) | Trả về giá trị của key , nếu key không tồn tại trả về d , mặc định là None |
dict.items() | Trả về một khung nhìn mới về các mục của dictionary (key , value ) |
dict.keys() | Trả về một khung nhìn mới về các key của dictionary |
dict.pop(key[,d]) | Xóa bỏ một mục có khóa key và trả về giá trị của key đó hoặc d nếu key không tồn tạo. Nếu d không được cung cấp và key không tồn tại, một ngoại lệ KeyError được tạo ra |
dict.popitem() | Xóa bỏ và trả về một mục tùy ý (key , value ). Tạo ra ngoại lệ KeyError nếu dictionary trống |
dict.setdefault(key[,d]) | Nếu có key trong dictionary , trả về giá trị của nó. Nếu không, thêm key với giá trị d và trả về d , mặc định None |
dict.update([other]) | Bổ sung dictionary với cặp key/value từ một dictionary other , ghi đè nếu key đã tồn tại |
dict.values() | Trả về một khung nhìn mới về các value trong dictionary |
Chi tiết các phương thức dựng sẵn trong dictionary
1. Dict.clear()
Phương thức này sẽ loại bỏ tất cả các phần tử của
dictionary
. Phương thức không nhận bất kì tham số nào và cũng không trả về giá trị nào (trả về None
)>>> d = { 0 : 'a', 1 : 'a', 2 : 'a', 3 : 'a'}
>>> a.clear()
>>> d
{}
Bạn cũng có thể xóa tất cả các phần tử của
dictionary
bằng cách gán với dictionary
rỗng. Tuy nhiên có sự khác biệt giữa 2 cách nếu có một biến khác đang tham chiếu đến.
Hãy xem ví dụ sau:
>>> a = { 0 : 'a', 1 : 'a', 2 : 'a', 3 : 'a'}
>>> b = a
>>> a.clear
>>> a
{}
>>> b
{}
# Với cách 2
>>> a = { 0 : 'a', 1 : 'a', 2 : 'a', 3 : 'a'}
>>> b = a
>>> a = {}
>>> a
{}
>>> b
{ 0 : 'a', 1 : 'a', 2 : 'a', 3 : 'a'}
2. Dict.copy()
Phương thức trả về một bản sao của từ điển. Phương thức không nhận bất kì tham số nào
>>> a = { 0 : 'a', 1 : 'a', 2 : 'a', 3 : 'a'}
>>> a.copy()
{0 : 'a', 1 : 'a', 2 : 'a', 3 : 'a'}
3. Dict.fromkeys(seq[,v])
Phương thức tạo ra một từ điển mới với
key
là các phần tử của seq
với value v
được cung cấp bởi người dùng. nếu value
không được cung cấp thì nó sẽ nhận giá trị mặc định là None
>>> keys = {'a', 'b', 'c', 'd'}
>>> a = dict.fromkeys(keys)
>>> a
{'d': None, 'c': None, 'a': None, 'b': None}
# Với v được cung cấp
>>> keys = {'a', 'b', 'c', 'd'}
>>> a = dict.fromkeys(keys, 1)
>>> a
{'d': 1, 'c': 1, 'a': 1, 'b': 1}
4. Dict.get(key[, value])
Phương thức trả về một
value
của một key
đã cho. Và trả về value
được cung cấp nếu key
không tồn tại, mặc định là None
.>>> a = {'a': 1, 'b': 2, 'c': 3, 'd':4}
>>> a.get('f')
#Không in ra gì <=> None
>>> a.get('f', 6)
6
5. Dict.items()
Phương thức trả về một khung nhìn mới về các mục của
dictionary
(key
, value
). Phương thức không nhận bất kì tham số nào.>>> a = {'a': 1, 'b': 2, 'c': 3, 'd':4}
>>> a.items()
dict_items([('a', 5), ('b', 2), ('c', 3), ('d', 4)])
6. Dict.keys()
Phương thứ trả về một khung nhìn mới về các tất cả các
key
của dictionary
. Phương thức không nhận bất kì tham số nào. Khi dictionary
thay đổi, khung nhìn cũng phản ánh nhưng thay đổi nào.>>> a = {'a': 1, 'b': 2, 'c': 3, 'd':4}
>>> a.keys()
dict_keys(['a', 'b', 'c', 'd'])
7. Dict.pop(key[,d])
Phương thức loại bỏ và trả về một phần tử của
dictionary
từ key
đã cho. d
sẽ được trả về nếu key
không tồn tại trong dictionary
. nếu key
không tìm thấy và d
cũng không được cung cấp, sẽ tạo ra một ngoại lê KeyError
.>>> a = {'a': 1, 'b': 2, 'c': 3, 'd':4}
>>> a.pop('a')
5
>>> a.pop('f', 6)
6
>>> a.pop('e')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'e'
8. Dict.popitem()
Phương thức loại bỏ một cặp phần tử (
key
, value
) tùy ý và trả về cặp giá trị đó. Phương thức không nhận bất kì đối số nào và trả về một ngoại lệ KeyError
nếu từ điển trống.>>> a = {'a': 1, 'b': 2, 'c': 3, 'd':4}
>>> a.popitem()
('d', 4)
>>> b = {}
>>> b.popitem()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'popitem(): dictionary is empty'
9. Dict.setdefault(key[, default_value])
Phương thức trả về một
value
của key
(nếu key
tồn tại trong dictionary
). Nếu không nó sẽ thêm một cặp key,default_value
vào từ điển nếu default_value
được cung cấp còn không là key, None
.>>> a = {'a': 1, 'b': 2, 'c': 3, 'd':4}
>>> a.setdefault('a')
1
>>> a.setdefault('f', 6)
6
>>> a
{'a': 5, 'b': 2, 'c': 3, 'd': 4, 'f': 6}
>>> a.setdefault('e')
>>> a
{'a': 5, 'b': 2, 'c': 3, 'd': 4, 'f': 6, 'e': None}
10. Dict.update([other])
Phương thức cập nhật từ điển từ một dictionary
other
hoặc một iterabel
các cặp key, value
. Nếu key
đã tồn tại trong từ điển nó sẽ cập nhật value
mới cho key
đó. Phương thức không trả về giá trị nào (trả về None
), nếu update()
được gọi mà không truyền tham số dictionary
sẽ không thay đổi.>>> a = {'a': 1, 'b': 2, 'c': 3, 'd':4}
>>> b = {'e':5}
>>> a.update(b)
>>> a
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
# Hoặc với một iterable các cặp key,value
>>> a.update('f'=6, 'g'=7)
>>> a
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g':7}
11. Dict.values()
Phương thức trả về một đối tượng khung nhìn hiển thị danh sách tất cả các giá trị trong
dictionary
. Phương thức không nhận bất kì tham số nào>>> a = {'a': 1, 'b': 2, 'c': 3, 'd':4}
>>> a.values()
dict_values([1, 2, 3, 4])
Các hàm dững sẵn Python có thể sử dụng cho dictionary
Hàm | Miêu tả |
---|---|
all() | Trả về True nếu tât cả các khóa của dictionary là đúng(hoặc nếu dictionary rỗng) |
any() | Trả về Truenếu bất kỳ khóa nào của dictionary là đúng. Nếu dictionary rỗng, trả về False . |
len() | Trả về độ dài củadictionary . |
sorted() | Trả về một danh sách sắp xếp mới của các key trong dictionary . |
Tag:
Python cơ bản
Dictionary trong Python
Reviewed by Finn
on
December 15, 2018
Rating:
No comments: