Trong bài viết này, chúng tôi sẽ tìm hiểu xem một từ điển có các khóa trùng lặp hay không trong Python.
Câu trả lời thẳng là không. Bạn không thể có các khóa trùng lặp trong một từ điển trong Python. Nhưng chúng ta có thể có một hiệu ứng tương tự như giữ các khóa trùng lặp trong từ điển. Chúng ta cần hiểu lý do đằng sau câu hỏi này và làm thế nào chúng ta có thể đạt được các khóa trùng lặp trong Python.
Bạn không thể có các khóa trùng lặp trong Python, nhưng bạn có thể có nhiều giá trị liên quan đến một khóa trong Python. Nếu bạn muốn giữ các khóa trùng lặp trong từ điển, bạn có hai hoặc nhiều giá trị khác nhau mà bạn muốn liên kết với cùng một khóa trong từ điển. Từ điển không thể có cùng các khóa, nhưng chúng ta có thể đạt được hiệu ứng tương tự bằng cách giữ nhiều giá trị cho một khóa trong từ điển.
Hãy để hiểu với một ví dụ,
Giả sử chúng ta có một từ điển tên và số điện thoại,
Quảng cáo
# Dictionary of names and phone numbers phone_details = { 'Mathew': 212323, 'Ritika': 334455, 'John' : 345323 }
Đến bây giờ, mỗi tên [khóa] có một số điện thoại được liên kết với nó. Nhưng giả sử, John John có thêm hai số điện thoại và chúng tôi cũng muốn thêm chúng vào từ điển. Là chìa khóa ‘John, đã tồn tại trong từ điển, vì vậy nếu chúng ta cố gắng thêm hai cặp giá trị khóa với cùng một khóa như thế này,
phone_details['John'] = 111223 phone_details['John'] = 333444
HOẶC
phone_details.update[{ 'John' : 111223}] phone_details.update[{ 'John' : 333444}]
Nó sẽ cập nhật giá trị của khóa hiện có ‘John, tức là.
Mathew - 212323 Ritika - 334455 John - 333444
Để tránh loại vấn đề này, chúng ta có thể gán nhiều giá trị cho một khóa duy nhất. Như thế này,
Mathew - 212323 Ritika - 334455 John - [345323, 111223, 333444]
Thêm nhiều giá trị cho một khóa trong từ điển trong Python
Thay vì chèn khóa trùng lặp, chúng ta có thể thay đổi loại giá trị thành danh sách và gán thêm các giá trị cho nó.
Hãy để xem một ví dụ,
def add_value[dict_obj, key, value]: ''' Adds a key-value pair to the dictionary. If the key already exists in the dictionary, it will associate multiple values with that key instead of overwritting its value''' if key not in dict_obj: dict_obj[key] = value elif isinstance[dict_obj[key], list]: dict_obj[key].append[value] else: dict_obj[key] = [dict_obj[key], value] # Dictionary of names and phone numbers phone_details = { 'Mathew': 212323, 'Ritika': 334455, 'John' : 345323 } # Append a value to the existing key add_value[phone_details, 'John', 111223] # Append a value to the existing key add_value[phone_details, 'John', 333444] for key, value in phone_details.items[]: print[key, ' - ', value]
Đầu ra
Mathew - 212323 Ritika - 334455 John - [345323, 111223, 333444]
Ở đây chúng tôi đã tạo một hàm add_value [] thêm một cặp giá trị khóa vào từ điển. Nếu khóa đã tồn tại trong từ điển, nó sẽ liên kết nhiều giá trị với khóa đó thay vì ghi đè giá trị của nó. Nó theo logic này.
- Nếu khóa không tồn tại, sau đó thêm cặp giá trị khóa.
- Nếu chính tồn tại trong từ điển và loại giá trị không phải là danh sách. Sau đó tạo một danh sách tạm thời và thêm các giá trị cũ và mới cho nó. Sau đó gán đối tượng danh sách làm giá trị cho khóa trong từ điển.
- Nếu chính tồn tại trong từ điển và loại giá trị là một danh sách. Sau đó thêm giá trị mới vào danh sách.
Vì vậy, đây là cách chúng ta có thể có các khóa trùng lặp trong từ điển, tức là, bằng cách thêm nhiều giá trị cho cùng một khóa trong từ điển trong Python.
Tôi có danh sách sau đây chứa các số đăng ký xe trùng lặp với các giá trị khác nhau.Tôi muốn chuyển đổi nó thành một từ điển chấp nhận nhiều khóa đăng ký xe hơi này.
Cho đến nay khi tôi cố gắng chuyển đổi danh sách thành từ điển, nó sẽ loại bỏ một trong các phím.Làm cách nào để tạo một từ điển với các khóa trùng lặp?
Danh sách là:
EDF768, Bill Meyer, 2456, Vet_Parking
TY5678, Jane Miller, 8987, AgHort_Parking
GEF123, Jill Black, 3456, Creche_Parking
ABC234, Fred Greenside, 2345, AgHort_Parking
GH7682, Clara Hill, 7689, AgHort_Parking
JU9807, Jacky Blair, 7867, Vet_Parking
KLOI98, Martha Miller, 4563, Vet_Parking
ADF645, Cloe Freckle, 6789, Vet_Parking
DF7800, Jacko Frizzle, 4532, Creche_Parking
WER546, Olga Grey, 9898, Creche_Parking
HUY768, Wilbur Matty, 8912, Creche_Parking
EDF768, Jenny Meyer, 9987, Vet_Parking
TY5678, Jo King, 8987, AgHort_Parking
JU9807, Mike Green, 3212, Vet_Parking
Mã tôi đã thử là:
data_dict = {}
data_list = []
def createDictionaryModified[filename]:
path = "C:\Users\user\Desktop"
basename = "ParkingData_Part3.txt"
filename = path + "//" + basename
file = open[filename]
contents = file.read[]
print contents,"\n"
data_list = [lines.split[","] for lines in contents.split["\n"]]
for line in data_list:
regNumber = line[0]
name = line[1]
phoneExtn = line[2]
carpark = line[3].strip[]
details = [name,phoneExtn,carpark]
data_dict[regNumber] = details
print data_dict,"\n"
print data_dict.items[],"\n"
print data_dict.values[]