Python cung cấp nhiều cấu trúc dữ liệu khác nhau để lưu trữ thông tin. Từ điển là một cấu trúc dữ liệu python như vậy cho phép bạn lưu trữ các loại dữ liệu khác nhau ở một nơi. Nó cũng cung cấp khả năng tra cứu nhanh giúp tăng tốc độ truy cập vì nó bao gồm các cặp khóa-giá trị. Đôi khi bạn có thể cần xóa khóa từ điển trong khi lặp lại từ điển python. có nhiều hướng khác nhau để làm điều đó. Chúng ta sẽ xem xét từng phương pháp một
Python Xóa khóa từ điển trong khi lặp lại
Dưới đây là các cách khác nhau để xóa khóa từ điển trong khi lặp lại
1. Sử dụng hàm del
Trong ví dụ này, chúng tôi sẽ lặp qua khóa từ điển và sử dụng hàm del để xóa mục mong muốn
>>> d={1:'a',2:'b',3:'c'} >>> for i in d.keys[]: if i==2: del d[2] >>> d {1: 'a', 3: 'c'}
Tương tự, chúng ta cũng có thể xóa các mục bằng cách sử dụng các giá trị, trong quá trình lặp
>>> d={1:'a',2:'b',3:'c'} >>> for i in d.keys[]: if d[i]=='b': del d[i] >>> d {1: 'a', 3: 'c'}
Xin lưu ý, hàm del chỉ hoạt động trong Python 2 chứ không phải trong Python 3. Đối với python 3, bạn có thể sử dụng các phương pháp sau
2. Sử dụng hiểu từ điển
Hiểu từ điển tương tự như hiểu danh sách. Chúng cũng có thể được sử dụng để loại trừ các khóa theo yêu cầu của chúng tôi
Không nên xóa các mục khỏi từ điển trong khi lặp lại từ điển đó. Điều này có thể dẫn đến kết quả không chính xác do các phần tử bị bỏ qua hoặc một ngoại lệ sẽ được đưa ra để tránh hành vi không xác định ở giai đoạn sau. Ví dụ: xem xét đoạn mã sau
1
2
3
4
5
6
7
8
9
10
11
if __name__ == '__main__'.
d = {'A': 1, 'B'. 2, 'C'. 3}
key = 'B'
cho k trong d:
nếu k == phím:
del d[k]
in[d]
Tải xuống Chạy mã
Đầu ra.
Truy nguyên [lần gọi gần đây nhất].
Tệp “tập lệnh. py”, dòng 6, trong
cho k trong d.
Lỗi thời gian chạy. từ điển đã thay đổi kích thước trong quá trình lặp lại
Đoạn mã trên cho kết quả là RuntimeError: dictionary changed size during iteration
. Bài đăng này thảo luận về một số lựa chọn thay thế để xóa các mục khỏi từ điển trong Python một cách an toàn trong khi lặp lại nó.
1. Lặp lại một bản sao của từ điển
Một giải pháp đơn giản là lặp lại một bản sao của từ điển và xóa các mục khỏi từ điển gốc. Đây là một chương trình chứng minh điều đó
1
2
3
4
5
6
7
8
9
10
11
if __name__ == '__main__'.
d = {'A': 1, 'B'. 2, 'C'. 3}
key = 'B'
cho k trong d.bản sao[].
nếu k == phím:
del d[k]
in[d] # {'A': 1, 'C': 3}
Tải xuống Chạy mã
2. Thay đổi danh sách
Một tùy chọn khác là chuyển đổi các khóa của từ điển thành danh sách rồi lặp lại danh sách. Điều này được hiển thị dưới đây
1
2
3
4
5
6
7
8
9
10
11
if __name__ == '__main__'.
d = {'A': 1, 'B'. 2, 'C'. 3}
key = 'B'
cho k trong danh sách[d.phím[]].
nếu k == phím:
del d[k]
in[d] # {'A': 1, 'C': 3}
Tải xuống Chạy mã
Nếu bạn cần xóa các mục dựa trên giá trị của từ điển, hãy cân nhắc sử dụng hàm items[]
.
1
2
3
4
5
6
7
8
9
10
11
if __name__ == '__main__'.
d = {'A': 1, 'B'. 2, 'C'. 3}
val = 2
cho k, v in list[d.mặt hàng[]].
nếu v == val:
del d[k]
in[d] # {'A': 1, 'C': 3}
Tải xuống Chạy mã
3. Tạo danh sách các mục cần xóa
Ngoài ra, bạn có thể tạo một danh sách mới các mục cần xóa và xóa chúng sau khỏi từ điển. Điều này sẽ dịch sang một mã đơn giản dưới đây