Dictionary trong Python


Hôm nay ta sẽ tìm hiểu về dictionary trong python. Dictionary cũng giống như list nhưng thay vì dùng index là số thì dictionary dùng key/value. Ta xem ví dụ sau.

my_dict1 = {'name':'Mr D', 'age': 35}

Ta đã khai báo 1 dictionary tên là my_dict1 có key là name, age. Tương ứng là giá trị (value) 'Mr D', 35.

Dictionary key có thể là bất kỳ kiểu dữ liệu nào, còn list thì index chỉ có thể là số. Ví dụ trên key là dạng string.

Để try cập key 'name' và lấy ra giá trị 'Mr D'. Ta làm như sau.

print(my_dict1['name'])  # Mr D

Tương tự cho key 'age'.

print(my_dict1['age'])   # 35

Dictionary này có bao nhiêu phần tử ? Ta dùng len(...)

print(len(my_dict1))  # 2

Ta update giá trị mới.

my_dict1['name'] = 'Mr K'
print(my_dict1['name'])  # Mr K

Hoặc ta thêm giá trị mới vào dictionary.

my_dict1['email'] = 'example@gmail.com'
print(my_dict1['email'])  
# {'name': 'Mr K', 'age': 35, 'email': 'example@gmail.com'}

Nếu ta muốn loop qua 1 dictionary thì sao ?

for key in my_dict1:
    print(key)
    
# name
# age
# email

Ta muốn loop qua các giá trị của dictionary.

for key in my_dict1:
    print(key,my_dict1[key])

# name Mr K
# age 35
# email example@gmail.com

Ngoài các này thì ta có thể dung my_dict1.keys() và my_dict1.values() để lấy ra tất cả key và tất cả value.

for key in my_dict1.keys():
    print(key)
    
# name
# age
# email

for value in my_dict1.values():
    print(value)
    
# Mr K
# 35
# example@gmail.com

Muốn lấy ra tất cả key và kiểm tra một key nào đó có trong các key này hay không ta làm như sau.

list_key = list(my_dict1.keys())
print(list_key) # ['name', 'age', 'email'] 
print('job' in list_key)  # False

Nếu ta muốn lấy ra dạng key/value ta dùng my_dict1.items()

for element in my_dict1.items():
    print(element)

# ('name', 'Mr K')
# ('age', 35)
# ('email', 'example@gmail.com') 

Còn nếu muốn lấy key và value riêng lẻ ta làm như sau.

for key, value in my_dict1.items():
    print(key,value)

# name Mr K
# age 35
# email example@gmail.com

Nếu ta muốn kiểm tra key có giá trị chưa, nếu chưa ta sẽ gán giá trị.

if 'job' not in my_dict1:
    my_dict1['job'] = 'freelancer'

print(my_dict1)
# {'name': 'Mr K', 'age': 35, 'email': 'example@gmail.com', 'job': 'freelancer'}

Python giúp ta làm nhanh hơn bằng cách sau.

print(my_dict1.get('job','free'))  # freelancer
print(my_dict1.get('favorite','coding'))  # coding

print(my_dict1)

# {'name': 'Mr K', 'age': 35, 'email': 'example@gmail.com', 'job': 'freelancer'}

Ta thấy my_dict1.get('job','free') sẽ xem key 'job' có giá trị không nếu chưa có sẽ set giá trị là free. Do bên trên ta xét giá trị rồi là 'freelancer', nên không set giá trị free. Còn my_dict1.get('favorite','coding') kiểm tra xem key 'favorite' có giá trị chưa, chưa thì set là 'coding'. Do chưa có favorite nên set là 'coding'. Nhưng khi in ra cả dictionary thì không có key favorite. Vậy ta muốn thêm key 'favorite' và kiểm tra nếu chưa có value thì thêm value default cho nó luôn.

my_dict1.setdefault('favorite','coding')
print(my_dict1)

# {'name': 'Mr K', 'age': 35, 'email': 'example@gmail.com', 'job': 
'freelancer', 'favorite': 'coding'}

Vậy khác nhau giữa get(..) và setdefault(..) là

  • get thì chỉ get giá trị key trong dictionary nếu chưa có giá trị thì set giá trị cho nó, ngay cả key đó không có trong dictionary thì cũng set giá trị khi ta lấy ra, chứ get không thêm key vào dictionary.

  • setdefault thì thêm key vào dictionary và set giá trị default cho nó luôn.

Vậy là ta đã học cách sử dụng dictionary trong python rồi nhé. Happy ^_^