AI Cho Mọi Người

AI Cho Mọi Người

Dictionary trong Python

 

 

Dictionary là một danh sách các phần tử. Mỗi phần tử là một cặp key và value. Dictionary không được sắp xếp. Bạn có thể truy cập vào danh sách các value hoặc key một cách độc lập. Ví dụ tạo một dictionary gồm 2 phần tử

d = {'first':'string value', 'second':[1,2]}
keys = d.keys()
values = d.values()

print(keys)
print(values)

 

Kết quả

dict_keys(['first', 'second'])
dict_values(['string value', [1, 2]])

 

Bạn có thể lấy value dựa vào key như sau

d = {'first':'string value', 'second':[1,2]}
print(d['first'])
print(d['second'])

 

Kết quả

string value
[1, 2]

 

Chúng ta có thể dùng hàm items() để lấy về một danh sách các tuple (key, value) như sau

d = {'first':'string value', 'second':[1,2]}
items = d.items()

print('items:', items)
for k,v in items:
    print(k, v)

 

Kết quả

items: dict_items([('first', 'string value'), ('second', [1, 2])])
first string value
second [1, 2]

 

Để lấy giá trị tương ứng với một khóa cụ thể, bạn có thể dùng hàm get() hay hàm pop(). Sự khác biệt giữa hai hàm này là hàm pop() xóa phần tử được lấy ra từ dictionary.

Ví dụ về dùng hàm get()

d = {'first':'string value', 'second':[1,2]}
value = d.get('first')

print(value)
print(d)

 

Kết quả

string value
{'first': 'string value', 'second': [1, 2]}

 

Ví dụ về dùng hàm pop()

d = {'first':'string value', 'second':[1,2]}
value = d.pop('first')

print(value)
print(d)

 

Kết quả

string value
{'second': [1, 2]}

 

Chúng ta có thể lấy ra một phần tử với hàm popitem() như sau

d = {'1':'value1', '2':'value2', '3':'value3', '4':'value4'}
item = d.popitem()

print(item)
print(d)

 

Kết quả

('4', 'value4')
{'1': 'value1', '2': 'value2', '3': 'value3'}

 

Chúng ta sử dụng hàm copy() để sao chép một một dictionary

d1 = {'a': [1,2]}
d2 = d1.copy()

print('d1:', d1)
print('d2:', d2)

 

Kết quả

d1: {'a': [1, 2]}
d2: {'a': [1, 2]}

 

Tuy nhiên, hàm copy() chỉ sap chép kiểu shallow, nghĩa là thay đổi giá trị của một dictionary sẽ thay đổi theo các bản sao chép của nó.

d1 = {'a': [1,2], 'b': 5}
d2 = d1.copy()

# thay đổi giá trị d2 sẽ ảnh hưởng đến d1
d2['a'][0] = 3
d2['a'][1] = 4

print('d1:', d1)
print('d2:', d2)

 

Kết quả

d1: {'a': [3, 4], 'b': 5}
d2: {'a': [3, 4], 'b': 5}

 

Để tạo một bản sao độc lập hoàn toàn với bản gốc, chúng ta sử dụng hàm deepcopy() trong module copy như sau

import copy

d1 = {'a': [1,2], 'b': 5}
d2 = copy.deepcopy(d1)

# thay đổi giá trị d2 
d2['a'][0] = 3
d2['a'][1] = 4

print('d1:', d1)
print('d2:', d2)

 

Kết quả

d1: {'a': [1, 2], 'b': 5}
d2: {'a': [3, 4], 'b': 5}

 

Bạn có thể xóa tất cả các phần tử của một dictionary bằng hàm clear()

d = {'a': [1,2], 'b': 5}
print(d)

d.clear()
print(d)

 

Kết quả

{'a': [1, 2], 'b': 5}
{}

 

Từ khóa del có thể được sử dụng để xóa một phần tử trong dictionary

d = {'a': [1,2], 'b': 5}
print(d)

del d['a']
print(d)

 

Kết quả

{'a': [1, 2], 'b': 5}
{'b': 5}

 

Từ khóa del cũng có thể dùng để xóa một dictionary. Sau khi xóa, nếu chúng ta cố dùng lại sẽ bị báo lỗi sau

d = {'a': [1,2], 'b': 5}
print(d)

del d
print(d)

 

Kết quả

{'a': [1, 2], 'b': 5}

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-45-75b31475aad4> in <module>
      3 
      4 del d
----> 5 print(d)

NameError: name 'd' is not defined

 

Chúng ta có thể dùng hàm update() để kết hợp hai dictionary như sau

d1 = {'a':1}
d2 = {'b':2, 'c':3}

print('d1:', d1)
print('d2:', d2)

d1.update(d2)
print('d1 sau khi update:', d1)

 

Kết quả

d1: {'a': 1}
d2: {'b': 2, 'c': 3}
d1 sau khi update: {'a': 1, 'b': 2, 'c': 3}

 

Chúng ta có thể tạo một dictionary từ hai list. Một list cho các key và một list cho các value.

l_keys   = ['a', 'b', 'c', 'd', 'e']
l_values = [1, 2, 3, 4, 5]

d = {(k,v) for (k,v) in zip(l_keys,l_values)}
print(d)

 

Kết quả

{('b', 2), ('c', 3), ('d', 4), ('e', 5), ('a', 1)}