Nếu bạn cố gắng truy cập các giá trị từ một từ điển hoặc đối tượng có thể lặp lại bằng cách sử dụng giá trị chuỗi thay vì giá trị số nguyên thì bạn sẽ nhận được thông báo lỗi sau:
TypeError: string indices must be integers
Trong bài viết này, tôi sẽ chỉ cho bạn các ví dụ về lý do tại sao bạn có thể nhận được thông báo lỗi này và cách khắc phục nó.
Cách truy cập các giá trị từ danh sách trong Python
Trong ví dụ này, chúng ta có danh sách các nhạc cụ sau:
instruments = ['flute', 'trumpet', 'oboe', 'percussion', 'guitar']
Nếu chúng tôi muốn truy cập công cụ thứ ba trong danh sách, chúng tôi sẽ sử dụng giá trị chỉ số bằng số là 2:
instruments[2]
Dòng mã sau đây sẽ in ra chính xác kết quả của oboe
:
instruments = ['flute', 'trumpet', 'oboe', 'percussion', 'guitar']
print(instruments[2])

Nếu tôi cố truy cập vào cùng danh sách đó nhưng thay vào đó lại sử dụng chỉ mục chuỗi của 'oboe'
thì nó sẽ dẫn đến một thông báo lỗi:
instruments = ['flute', 'trumpet', 'oboe', 'percussion', 'guitar']
print(instruments['oboe'])

Nếu bạn gặp thông báo lỗi này, hãy kiểm tra kỹ để đảm bảo rằng bạn đang sử dụng giá trị chỉ mục số để truy cập các phần tử thay vì giá trị chuỗi.
Cách truy cập các giá trị từ một từ điển trong Python
Hãy sửa đổi ví dụ trước của chúng ta để tạo một từ điển các công cụ và số lượng.
instruments = {
'flute': 2,
'trumpet': 5,
'oboe': 1,
'percussion': 4,
'guitar': 9
}
Nếu chúng tôi muốn in ra tất cả các giá trị từ instruments
từ điển, thì chúng ta có thể sử dụng một vòng lặp với .values()
phương pháp.
for quantity in instruments.values():
print(quantity)

Nếu chúng tôi loại bỏ .values()
và cố gắng truy cập các giá trị bằng chỉ số chuỗi, thì chúng tôi sẽ nhận được thông báo lỗi sau:
for quantity in instruments:
print(quantity['flute'])
print(quantity['trumpet'])
print(quantity['oboe'])
print(quantity['percussion'])
print(quantity['guitar'])

Nếu bạn in ra quantity
thì bạn sẽ thấy đó là một chuỗi.
for quantity in instruments:
print(quantity)

Nếu bạn đã cố viết quantity['flute']
sau đó nó chuyển thành 'flute'['flute']
điều này không có ý nghĩa trong Python.
Cách giải quyết vấn đề này là tham khảo instruments
từ điển thay vì sử dụng quantity
.
Mã tái cấu trúc sau đây sẽ tạo ra kết quả chính xác:
instruments = {
'flute': 2,
'trumpet': 5,
'oboe': 1,
'percussion': 4,
'guitar': 9
}
print(instruments['flute'])
print(instruments['trumpet'])
print(instruments['oboe'])
print(instruments['percussion'])
print(instruments['guitar'])

Tôi hy vọng bạn thích bài viết này và chúc may mắn trên hành trình Python của bạn.