Cùng một giá trị trong từ điển Python

Về bản chất, từ điển là ánh xạ một-một, nhưng không khó để biến nó thành một-nhiều—nói cách khác, để tạo một ánh xạ khóa thành nhiều giá trị. Có hai cách tiếp cận khả thi, tùy thuộc vào cách bạn muốn xử lý các bản sao trong tập giá trị cho khóa. Cách tiếp cận sau đây cho phép sao chép như vậy

d1 = {}
d1.setdefault[key, []].append[value]

trong khi phương pháp này tự động loại bỏ trùng lặp

d2 = {}
d2.setdefault[key, {}][value] = 1

Một từ điển bình thường thực hiện ánh xạ đơn giản của một khóa tới một giá trị. Công thức này cho thấy hai cách dễ dàng, hiệu quả để đạt được ánh xạ của từng khóa tới nhiều giá trị. Ngữ nghĩa của hai cách tiếp cận hơi khác nhau nhưng quan trọng là cách chúng xử lý sự trùng lặp. Mỗi cách tiếp cận đều dựa trên phương thức

d2 = {}
d2.setdefault[key, {}][value] = 1
7 của một từ điển để khởi tạo mục nhập cho một khóa trong từ điển, nếu cần và trong mọi trường hợp để trả lại mục nhập đã nói

Tất nhiên, bạn cần có khả năng làm nhiều việc hơn là chỉ thêm giá trị cho một khóa. Với cách tiếp cận đầu tiên, cho phép sao chép, đây là cách truy xuất danh sách các giá trị cho một khóa

list_of_values = d1[key]

Đây là cách xóa một giá trị cho một khóa, nếu bạn không phiền để lại danh sách trống dưới dạng các mục của

d2 = {}
d2.setdefault[key, {}][value] = 1
8 khi giá trị cuối cùng của khóa bị xóa

d1[key].remove[value]

Mặc dù danh sách trống nhưng vẫn dễ dàng kiểm tra sự tồn tại của khóa có ít nhất một giá trị

def has_key_with_some_values[d, key]:
    return d.has_key[key] and d[key]

Điều này trả về

d2 = {}
d2.setdefault[key, {}][value] = 1
9 hoặc một danh sách, có thể trống. Trong hầu hết các trường hợp, việc sử dụng một hàm luôn trả về một danh sách [có thể là một danh sách trống] sẽ dễ dàng hơn, chẳng hạn như

________số 8_______

Bạn có thể sử dụng một trong hai chức năng này trong một câu lệnh. Ví dụ

if get_values_if_any[d1, somekey]:
if has_key_with_some_values[d1, somekey]:

Tuy nhiên,

list_of_values = d1[key]
0 thường tiện dụng hơn. Ví dụ: bạn có thể sử dụng nó để kiểm tra xem
list_of_values = d1[key]
1 có nằm trong số các giá trị của
list_of_values = d1[key]
2 không

if 'freep' in get_values_if_any[d1, somekey]:

Sự thuận tiện bổ sung này xuất phát từ việc

list_of_values = d1[key]
0 luôn trả về một danh sách, thay vì đôi khi là một danh sách và đôi khi là
d2 = {}
d2.setdefault[key, {}][value] = 1
9

Cách tiếp cận đầu tiên cho phép mỗi giá trị xuất hiện nhiều lần cho mỗi khóa đã cho. Ví dụ

example = {}
example.setdefault['a', []].append['apple']
example.setdefault['b', []].append['boots']
example.setdefault['c', []].append['cat']
example.setdefault['a', []].append['ant']
example.setdefault['a', []].append['apple']

Bây giờ

list_of_values = d1[key]
5 là
list_of_values = d1[key]
6. Nếu bây giờ chúng ta thực hiện

example['a'].remove['apple']

kiểm tra sau vẫn hài lòng

d2 = {}
d2.setdefault[key, {}][value] = 1
0

list_of_values = d1[key]
7 đã xuất hiện hai lần và chúng tôi chỉ xóa nó một lần. [Thử nghiệm cho
list_of_values = d1[key]
7 với
list_of_values = d1[key]
9 sẽ tổng quát hơn, mặc dù tương đương trong trường hợp này. ]

Cách tiếp cận thứ hai, loại bỏ trùng lặp, yêu cầu các thành ngữ khá giống nhau. Đây là cách truy xuất danh sách các giá trị cho một khóa

d2 = {}
d2.setdefault[key, {}][value] = 1
1

Dưới đây là cách xóa cặp khóa/giá trị, để lại các từ điển trống dưới dạng các mục của

d1[key].remove[value]
0 khi giá trị cuối cùng của khóa bị xóa

d2 = {}
d2.setdefault[key, {}][value] = 1
2

Hàm

d1[key].remove[value]
1 được hiển thị trước đó cũng hoạt động cho cách tiếp cận thứ hai và bạn cũng có các lựa chọn thay thế tương tự, chẳng hạn như

d2 = {}
d2.setdefault[key, {}][value] = 1
3

Cách tiếp cận thứ hai không cho phép trùng lặp. Ví dụ

d2 = {}
d2.setdefault[key, {}][value] = 1
4

Bây giờ

list_of_values = d1[key]
5 là
d1[key].remove[value]
3. Bây giờ, nếu chúng ta thực hiện

d2 = {}
d2.setdefault[key, {}][value] = 1
5

bài kiểm tra sau đây không thỏa mãn

d2 = {}
d2.setdefault[key, {}][value] = 1
0

list_of_values = d1[key]
7 đã có mặt, nhưng chúng tôi vừa xóa nó

Công thức này tập trung vào cách viết mã chức năng thô, nhưng nếu bạn muốn sử dụng chức năng này một cách có hệ thống, bạn sẽ muốn gói gọn nó trong một lớp. Vì mục đích đó, bạn cần đưa ra một số quyết định thiết kế mà công thức nêu bật. Bạn có muốn một giá trị nằm trong mục nhập cho một khóa nhiều lần không?

Từ điển Python có thể có cùng giá trị không?

Từ điển trong python được sắp xếp theo thứ tự, có thể thay đổi và không cho phép trùng lặp . Điều đó có nghĩa là từ điển không thể có hai mục có cùng khóa; . Kiểm tra cách tạo từ điển python để tìm hiểu thêm.

Từ điển có thể chứa các giá trị trùng lặp trong Python không?

Các mục từ điển được sắp xếp theo thứ tự, có thể thay đổi và không cho phép trùng lặp .

Chủ Đề