Thêm các phần tử vào từ điển và nối các từ điển bằng Python

Kinh doanh

Phần này giải thích cách thêm phần tử mới vào từ điển (đối tượng kiểu dict) hoặc cập nhật giá trị của phần tử hiện có trong Python. Nó cũng có thể nối (nối, hợp nhất) nhiều từ điển.

  • Thêm và cập nhật các phần tử vào từ điển bằng cách chỉ định các khóa.
  • Kết nối (hợp nhất) của nhiều từ điển: update (), | toán tử, | =
  • Thêm hoặc cập nhật nhiều phần tử: toán tử update (), | =

Thêm và cập nhật các phần tử vào từ điển bằng cách chỉ định các khóa.

Bạn có thể thêm / cập nhật các phần tử từ điển theo cách sau.

Đối tượng từ điển [key] = giá trị

Khi một khóa không tồn tại được chỉ định, một phần tử mới sẽ được thêm vào và khi một khóa hiện có được chỉ định, giá trị hiện có sẽ được cập nhật (ghi đè).

d = {'k1': 1, 'k2': 2}

d['k3'] = 3
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}

d['k1'] = 100
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3}

Nếu bạn không muốn cập nhật giá trị của khóa tồn tại, hãy sử dụng phương thức setdefault ().

Nối (hợp nhất) nhiều từ điển: update (), | toán tử, | =

update()

Nếu một đối tượng từ điển khác được chỉ định làm đối số cho phương thức update () của đối tượng từ điển, tất cả các phần tử của nó sẽ được thêm vào.

Nếu khóa trùng lặp với khóa hiện có, khóa đó sẽ bị ghi đè bằng giá trị của từ điển được chỉ định trong đối số.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}

d1.update(d2)
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

Lỗi khi chỉ định nhiều từ điển trong đối số update ().

d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}

# d1.update(d2, d3)
# TypeError: update expected at most 1 arguments, got 2

Như đã giải thích ở phần sau, update () có thể thêm các phần tử mới làm đối số từ khóa (key = value), vì vậy chỉ cần thêm ** vào từ điển và mở rộng từng phần tử dưới dạng đối số từ khóa và chuyển nó.

d1.update(**d2, **d3)
print(d1)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}

Như trong các ví dụ trước, sử dụng update () sẽ cập nhật đối tượng từ điển gốc.

Nếu bạn muốn tạo một từ điển mới bằng cách hợp nhất nhiều từ điển, hãy sử dụng {** d1, ** d2} (từ Python 3.5) hoặc dict (** d1, ** d2).

Trong Python 3.9 trở lên, cũng có thể tạo từ điển mới bằng cách sử dụng | toán tử được mô tả tiếp theo.

| toán tử, | = toán tử (Python 3.9 trở lên)

Kể từ Python 3.9, có thể hợp nhất hai từ điển bằng cách sử dụng | nhà điều hành. Khi hai từ điển có cùng khóa, giá trị ở bên phải sẽ được ưu tiên.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}

print(d1 | d2)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

print(d2 | d1)
# {'k1': 1, 'k3': 3, 'k4': 4, 'k2': 2}

| Cũng có thể kết hợp nhiều từ điển bằng cách sử dụng một loạt toán tử.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}

print(d1 | d2 | d3)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}

+ Như với update (), đối tượng bên trái được cập nhật.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}

d1 |= d2
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

Thêm hoặc cập nhật nhiều phần tử: toán tử update (), | =

update()

Khi đối số từ khóa key = value được chỉ định trong phương thức update (), khóa key và giá trị value sẽ được thêm vào. Nếu khóa chồng lên một khóa hiện có, nó sẽ bị ghi đè bằng giá trị được chỉ định trong đối số.

d = {'k1': 1, 'k2': 2}

d.update(k1=100, k3=3, k4=4)
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

Cũng có thể chỉ định danh sách (khóa, giá trị) làm đối số cho phương thức update (). Nếu khóa chồng lên một khóa hiện có, nó sẽ bị ghi đè với giá trị được chỉ định làm đối số.

d = {'k1': 1, 'k2': 2}

d.update([('k1', 100), ('k3', 3), ('k4', 4)])
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

Kết hợp với hàm zip (), các phần tử có thể được thêm vào từ danh sách các khóa và danh sách các giá trị.

d = {'k1': 1, 'k2': 2}

keys = ['k1', 'k3', 'k4']
values = [100, 3, 4]

d.update(zip(keys, values))
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

| = toán tử (Python 3.9 trở lên)

Với toán tử | =, một danh sách (khóa, giá trị) có thể được chỉ định ở phía bên phải.

d = {'k1': 1, 'k2': 2}

d |= [('k1', 100), ('k3', 3), ('k4', 4)]
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

Lưu ý rằng chỉ định một danh sách với dấu | toán tử sẽ dẫn đến lỗi. Chỉ hỗ trợ các thao tác từ điển sang từ điển.

# print(d | [('k1', 100), ('k3', 3), ('k4', 4)])
# TypeError: unsupported operand type(s) for |: 'dict' and 'list'