HomeLập trìnhPythonHướng dẫn từ...

Hướng dẫn từ điển Python – Cách lặp lại, sao chép và hợp nhất từ ​​điển trong Python 3.9


Python là một ngôn ngữ phổ biến cho khoa học dữ liệu. Và làm việc với các bộ sưu tập là một trong những kỹ năng cơ bản nhất mà bạn cần phải có.

Bộ sưu tập là cấu trúc dữ liệu chứa nhiều phần tử thuộc nhiều loại dữ liệu khác nhau.

Hôm nay chúng ta sẽ xem xét chi tiết về từ điển, đây là một loại bộ sưu tập đặc biệt trong Python. Chúng tôi sẽ đề cập đến chức năng cơ bản, hoạt động bên trong của chúng và cả một số tính năng tiên tiến của phiên bản Python mới nhất.

Đến cuối hướng dẫn này, bạn sẽ biết

  • từ điển nào
  • Cách làm việc với từ điển
  • Cách lặp qua từ điển
  • Cách sao chép từ điển
  • Cách hợp nhất từ ​​điển trong Python 3.9

Từ điển trong Python là gì?

Trước khi tìm hiểu sâu về một điều gì đó, bạn nên bắt đầu với một định nghĩa đơn giản và cơ bản.

Như tôi đã nói, từ điển là một loại bộ sưu tập trong Python. Tuy nhiên, trái ngược với danh sách, bộ dữ liệu và tập hợp, bạn không lưu trữ các giá trị riêng lẻ mà được gọi là cặp khóa-giá trị. Điều này có nghĩa là thay vì đề cập đến các giá trị của bạn thông qua một chỉ mục, bạn sử dụng một khóa, là mã định danh duy nhất.

l1 = [10, "Hello", True, 20.23] # List
t1 = (10, "Hello", True, 20.23) # Tuple
s1 = {10, "Hello", True, 20.23} # Set

d1 = {'number': 10,
      'greeting': "Hello",
      'boolean': True,
      'float': 20.23} # Dictionary

Trong ví dụ trên, bạn có thể thấy sự khác biệt. Các cặp khóa-giá trị riêng lẻ được phân tách bằng dấu phẩy. Mỗi cặp bắt đầu bằng một khóa duy nhất theo sau là dấu hai chấm và giá trị tương ứng. Lưu ý rằng giá trị không nhất thiết phải là duy nhất vì chúng tôi không sử dụng nó để truy cập hoặc xác định bất kỳ thứ gì.

Ngoài ra, hãy nhớ rằng chúng tôi có thể sử dụng bất kỳ loại dữ liệu nào cho các khóa và giá trị mà chúng tôi muốn. Ở đây chúng ta chỉ sử dụng chuỗi cho các định danh nhưng chúng ta cũng có thể sử dụng số nguyên, số float, tập hợp hoặc thậm chí cả Booleans.

Tuy nhiên, bạn nên luôn tự hỏi mình điều này hợp lý đến mức nào. Hầu hết thời gian một chuỗi sẽ là sự lựa chọn tốt nhất.

Cách làm việc với từ điển trong Python

Được rồi, bây giờ chúng ta đã biết từ điển là gì, hãy xem cách làm việc với chúng.

Đầu tiên, chúng ta sẽ thực hiện các thao tác cơ bản như truy cập, thêm và xóa giá trị. Sau đó, chúng ta sẽ xem xét một số chủ đề nâng cao hơn và thú vị hơn.

Bạn có thể truy cập các phần tử của từ điển trong Python giống như cách bạn truy cập các phần tử từ bất kỳ bộ sưu tập nào khác. Sự khác biệt duy nhất là bạn chuyển một khóa chứ không phải một chỉ mục. Điều này cũng áp dụng cho việc thay đổi và thậm chí cho các giá trị nối thêm.

person = {'name': "Mike", 'age': 25, 'weight': 80.5}

print(person['name'])
person['name'] = "Bob" # Changing existing value
print(person['name'])

person['gender'] = 'm' # Creating new key-value pair
print(person['gender'])

Như bạn có thể thấy ở đây, bạn chỉ cần chuyển một khóa để truy cập giá trị mà nó đề cập đến. Đầu tiên bạn in tên, sau đó bạn thay đổi nó. Sau đó, bạn in lại để đảm bảo các thay đổi đã được thực hiện.

Đọc thêm  Cách xây dựng gói Python đầu tiên của bạn

Lưu ý rằng điều này không chỉ hoạt động đối với các cặp hiện có mà còn đối với các cặp mới. Để tạo một cặp khóa-giá trị mới, chỉ cần tham khảo khóa chưa tồn tại và gán giá trị cho khóa đó. Sau đó, cặp này sẽ tự động được thêm vào từ điển.

Việc xóa các giá trị khỏi từ điển hoạt động theo cách khác. Ở đây bạn có thể sử dụng xóa từ khóa hoặc nhạc pop() phương pháp.

Sự khác biệt chính giữa hai cách tiếp cận đó là xóa chỉ xóa cặp khóa-giá trị, trong khi nhạc pop() cũng trả về giá trị đã xóa sau đó. Tùy thuộc vào trường hợp sử dụng của bạn, bạn sẽ phải quyết định phương pháp nào phù hợp với nhiệm vụ của mình hơn.

Cách lặp lại từ điển trong Python

Vì từ điển là bộ sưu tập, bạn cũng có thể lặp lại chúng. Nhưng điều này không đơn giản và dễ hiểu như với các loại bộ sưu tập khác.

Điều này là do bạn không xử lý các giá trị riêng lẻ mà với các cặp. Khi bạn lặp lại một từ điển, sử dụng vòng lặp for, thực ra bạn chỉ đang lặp lại các phím.

names_ages = {'Bob': 50,
              'Anna': 28,
              'Max': 30,
              'John': 76}

for element in names_ages:
    print(element)
    
# Output: Bob  Anna  Max  John

Do đó, nếu bạn muốn lặp lại các giá trị hoặc thậm chí cả cặp, bạn cần sử dụng các phương thức bổ sung.

Để truy cập các giá trị, bạn chỉ cần gọi hàm giá trị() phương pháp. Nó trả về một trình vòng lặp cho tất cả các giá trị của từ điển.

Để truy cập các cặp đầy đủ, bạn có thể gọi mặt hàng() phương pháp. Tại đây, bạn lặp qua danh sách các bộ dữ liệu, trong đó mỗi bộ dữ liệu đại diện cho một cặp khóa-giá trị.

Tất nhiên cũng có phím() phương thức, trong trường hợp bạn muốn làm việc với các khóa từ điển bên ngoài vòng lặp for.

print(list(names_ages.keys()))
print(list(names_ages.values()))
print(list(names_ages.items()))

# Output
# > ['Bob', 'Anna', 'Max', 'John']
# > [50, 28, 30, 76]
# > [('Bob', 50), ('Anna', 28), ('Max', 30), ('John', 76)]

Một điều quan trọng cần lưu ý ở đây là các phương thức đó không trả về danh sách thực tế. Chúng trả về các đối tượng mà bạn có thể sử dụng để lặp lại các khóa và giá trị. Nhưng bạn có thể dễ dàng đánh máy các đối tượng đó vào danh sách bằng cách sử dụng danh sách() chức năng.

Cách sao chép từ điển bằng Python

Bây giờ chúng ta đang đi vào một số nội dung nâng cao hơn.

Bạn sẽ không thể tin được bao nhiêu lần những lập trình viên mới và thiếu kinh nghiệm gặp rắc rối vì họ sao chép các bộ sưu tập sai cách. Họ khắc phục sự cố dự án của họ trong nhiều giờ và không thể tìm ra vấn đề.

Đọc thêm  Python Thêm vào từ điển – Thêm một mục vào một Dict

Vì vậy, hãy chú ý ở đây nếu bạn không muốn tự mình trải qua sự thất vọng đó.

Trước khi chúng ta nói về việc sao chép các bộ sưu tập và từ điển, hãy xem bạn thường sao chép các kiểu dữ liệu nguyên thủy như số nguyên như thế nào.

i1 = 20
i2 = i1

i2 += 10
print(i1, i2)

# Output: 20  30

Khi bạn muốn tạo một biến mới và sao chép giá trị của một số nguyên khác vào đó, bạn chỉ cần gán trực tiếp cho biến đó. Sau đó, bạn có thể thay đổi giá trị của số nguyên thứ hai và làm việc với nó mà không thay đổi bất kỳ điều gì về số thứ nhất.

Điều này cũng có tác dụng với Booleans, Floats, Strings, v.v. Tuy nhiên, hãy xem điều gì sẽ xảy ra khi chúng ta làm điều này với một từ điển.

d1 = {'a': 10, 'b': 20, 'c': 30}
d2 = d1
d2['c'] = 50

print(d1)
print(d2)

# Output
# {'a': 10, 'b': 20, 'c': 50}
# {'a': 10, 'b': 20, 'c': 50}

Điều gì đã xảy ra ở đây? Không phải chúng ta đã làm điều tương tự như trước đây sao? Tại sao từ điển đầu tiên lại thay đổi khi chúng ta sửa đổi từ điển thứ hai? Nó không chỉ là một bản sao?

Câu trả lời rõ ràng là không. Khi bạn gán một từ điển cho một biến mới, bạn thực sự đang chuyển cái gọi là thẩm quyền giải quyết.

Biến thứ hai không thực sự là một từ điển mà chỉ là một biến khác trỏ đến cùng một từ điển với từ điển đầu tiên. Do đó, việc bạn áp dụng các thay đổi trên biến nào không quan trọng, vì tất cả chúng đều được thực hiện trên một từ điển mà cả hai đều đề cập đến.

Nếu bạn muốn tạo một bản sao nông thực sự của một từ điển bằng Python, bạn cần sử dụng chính tả() chức năng hoặc gọi sao chép() phương pháp từ điển. Bằng cách đó, bạn tạo một từ điển mới có các thành phần giống như từ điển gốc.

d1 = {'a': 10, 'b': 20, 'c': 30}
d2 = dict(d1)
d3 = d1.copy()

d2['b'] = 50
d3['a'] = -90
print(d1) # unchanged

Tuy nhiên, lưu ý rằng các đối tượng bên trong bản sao vẫn là các đối tượng giống hệt như trong từ điển đầu tiên. Do đó, nếu chúng là các đối tượng hoặc bộ sưu tập phức tạp hơn, bạn sẽ có một từ điển riêng mới (nhưng các đối tượng bên trong nó sẽ tham chiếu đến các đối tượng giống như các đối tượng trong từ điển đầu tiên).

Để thay đổi điều đó, bạn sẽ phải tạo một bản sao được gọi là deep copy, nhưng điều này không nằm trong phạm vi của bài viết này.

Cách hợp nhất từ ​​điển trong Python

Cuối cùng nhưng không kém phần quan trọng, hãy nói về các tính năng từ điển tiên tiến của Python 3.9. Các tính năng này tập trung vào việc hợp nhất các từ điển.

Cho đến gần đây, các lập trình viên phải sử dụng cập nhật() hoặc sử dụng các toán tử giải nén.

d1 = {'a': 10, 'b': 20, 'c': 30}
d2 = {'c': 40, 'd': 60, 'e': 20}
d1.update(d2)
print(d1)

d1 = {'a': 10, 'b': 20, 'c': 30}
d3 = {**d1, **d2}
print(d3)

Sự khác biệt chính giữa hai cách tiếp cận đó là cập nhật() thêm các giá trị của từ điển này vào từ điển khác và áp dụng trực tiếp các thay đổi. Từ điển kết quả không được trả lại nhưng thực sự được lưu vào đối tượng đầu tiên.

Đọc thêm  Bản đồ Python – Cách ánh xạ danh sách trong Python 3.0, với mã hàm ví dụ

Mặt khác, khi bạn sử dụng các toán tử giải nén, bạn tạo một từ điển mới và đặt các cặp khóa-giá trị của hai từ điển vào đó bằng cách giải nén chúng.

Bây giờ bạn có thể tự hỏi điều gì sẽ xảy ra khi bạn hợp nhất hai từ điển có cùng một khóa bên trong chúng.

Bạn có thể nghĩ về điều đó như sau: Từ điển đầu tiên tạo cặp khóa-giá trị và từ điển thứ hai sẽ ghi đè lên cặp khóa-giá trị đó. Vì vậy, nếu bạn gọi phương thức cập nhật trên bộ sưu tập đầu tiên và chuyển bộ sưu tập thứ hai làm đối số, cặp khóa-giá trị của từ điển thứ hai sẽ xuất hiện trong kết quả.

Việc giải nén cũng vậy. Bất kỳ từ điển nào bạn vượt qua cuối cùng sẽ ghi đè lên những cái trước đó.

Vì vậy, đây là cách làm việc cũ. Tuy nhiên, trong Python 3.9, các toán tử hợp nhất và cập nhật đã được giới thiệu. Họ làm cho từ điển tham gia đơn giản hơn.

d1 = {'a': 10, 'b': 20, 'c': 30}
d2 = {'c': 40, 'd': 60, 'e': 20}

d3 = d1 | d2  # Merging
d1 |= d2      # Updating

Như bạn có thể thấy, toán tử để hợp nhất giống như toán tử được sử dụng cho phép toán OR theo bit. Thứ tự của các từ điển rất quan trọng nếu bạn có các khóa giống hệt nhau trong cả hai từ điển. Bộ sưu tập bên phải ghi đè lên bộ sưu tập bên trái.

Nếu bạn muốn cập nhật từ điển đầu tiên thay vì trả lại từ điển mới, chỉ cần kết hợp toán tử hợp nhất với toán tử gán cơ bản. Cách hợp nhất từ ​​điển này là phương pháp được đề xuất kể từ Python 3.9.

Nếu bạn là người học bằng thị giác hoặc thính giác nhiều hơn, bạn có thể xem video hướng dẫn của tôi về cách hợp nhất từ ​​điển bên dưới.

kết thúc

Được rồi, bây giờ bạn sẽ rất thoải mái khi làm việc với từ điển. Bạn không chỉ biết chúng là gì và cách sử dụng chúng mà còn hiểu cách chúng hoạt động ở cấp độ sâu hơn.

Khi làm đồ án, bạn sẽ biết cách sao chép từ điển đúng cách. Chúng tôi thậm chí còn đề cập đến một trong những tính năng tiên tiến của phiên bản Python mới nhất.

Đảm bảo rằng bạn xem lại các đoạn mã một lần nữa và hiểu cách thức và lý do chúng hoạt động. Điều này sẽ giúp bạn trở thành một lập trình viên Python giỏi hơn nhiều.

Nếu bạn quan tâm đến nhiều nội dung như thế này, bạn có thể xem kênh YouTube NeuralNine của tôi hoặc trang web neuralnine.com của tôi.

Đối với những người đam mê Python, tôi có một bộ sách Python đặc biệt dạy cho bạn ngôn ngữ từ đầu và cũng đi sâu vào các chủ đề nâng cao hơn như học máy và thị giác máy tính. Bạn có thể tìm thấy nó ở đây.

Tôi hy vọng bạn thích bài viết này và tôi chúc bạn một ngày tuyệt vời! 🙂



Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status