Tên lớp ... ok:/
Giải pháp của tôi là tạo một lớp, với các tính năng Dict, nhưng được triển khai như một danh sách với các đối tượng
dad = {"name": "dad"}
mom = {"name": "mom"}
boy = {"name": "son"}
girl = {"name": "daughter"}
# set
family = DictKeyDict[]
family[dad] = {"age": 44}
family[mom] = {"age": 43}
# or
family.set[dad, {"age": 44, "children": [boy, girl]}]
# or
family = DictKeyDict[
[dad, {"age": 44, "children": [boy, girl]}],
[mom, {"age": 43, "children": [boy, girl]}],
]
# update
family.update[[mom, {"age": 33}]] # oups sorry miss /!\ loose my children
family.set[{"pet": "cutty"}, "cat"]
del family[{"pet": "cutty"}] # cutty left...
family.set[{"pet": "buddy"}, "dog"]
family[{"pet": "buddy"}] = "wolf" # buddy was not a dog
print[family.keys[]]
print[family.values[]]
for k, v in family.items[]:
print[k, v]
4. Khóa và giá trị có thể là bất cứ điều gì sau đó.dict features, but implemented as a list with dad = {"name": "dad"}
mom = {"name": "mom"}
boy = {"name": "son"}
girl = {"name": "daughter"}
# set
family = DictKeyDict[]
family[dad] = {"age": 44}
family[mom] = {"age": 43}
# or
family.set[dad, {"age": 44, "children": [boy, girl]}]
# or
family = DictKeyDict[
[dad, {"age": 44, "children": [boy, girl]}],
[mom, {"age": 43, "children": [boy, girl]}],
]
# update
family.update[[mom, {"age": 33}]] # oups sorry miss /!\ loose my children
family.set[{"pet": "cutty"}, "cat"]
del family[{"pet": "cutty"}] # cutty left...
family.set[{"pet": "buddy"}, "dog"]
family[{"pet": "buddy"}] = "wolf" # buddy was not a dog
print[family.keys[]]
print[family.values[]]
for k, v in family.items[]:
print[k, v]
4 objects. key and value can be anything then.class DictKeyDictException[Exception]:
pass
class DictKeyDict[]:
def __init__[self, *args]:
values = [self.__create_element[key, value] for key, value in args]
self.__values__ = values
def __setitem__[self, key, value]:
self.set[key, value]
def __getitem__[self, key]:
return self.get[key]
def __len__[self]:
return len[self.__values__]
def __delitem__[self, key]:
keys = self.keys[]
if key in keys:
index = keys.index[key]
del self.__values__[index]
def clear[self]:
self.__values__ = []
def copy[self]:
return self.__values__.copy[]
def has_key[self, k]:
return k in self.keys[]
def update[self, *args, **kwargs]:
if kwargs:
raise DictKeyDictException[f"no kwargs allowed in '{self.__class__.__name__}.update' method"]
for key, value in args:
self[key] = value
return self.__values__
def __repr__[self] -> list:
return repr[self.__values__]
@classmethod
def __create_element[cls, key, value]:
return {"key": key, "value": value}
def set[self, key, value] -> None:
keys = self.keys[]
if key in keys:
index = keys.index[key]
self.__values__[index] = self.__create_element[key, value]
else:
self.__values__.append[self.__create_element[key, value]]
return self.__values__
def keys[self]:
return [dict_key_value["key"] for dict_key_value in self.__values__]
def values[self]:
return [value["value"] for value in self.__values__]
def items[self]:
return [[dict_key_value["key"], dict_key_value["value"]] for dict_key_value in self.__values__]
def pop[self, key, default=None]:
keys = self.keys[]
if key in keys:
index = keys.index[key]
value = self.__values__.pop[index]["value"]
else:
value = default
return value
def get[self, key, default=None]:
keys = self.keys[]
if key in keys:
index = keys.index[key]
value = self.__values__[index]["value"]
else:
value = default
return value
def __iter__[self]:
return iter[self.keys[]]
và cách sử dụng:
dad = {"name": "dad"}
mom = {"name": "mom"}
boy = {"name": "son"}
girl = {"name": "daughter"}
# set
family = DictKeyDict[]
family[dad] = {"age": 44}
family[mom] = {"age": 43}
# or
family.set[dad, {"age": 44, "children": [boy, girl]}]
# or
family = DictKeyDict[
[dad, {"age": 44, "children": [boy, girl]}],
[mom, {"age": 43, "children": [boy, girl]}],
]
# update
family.update[[mom, {"age": 33}]] # oups sorry miss /!\ loose my children
family.set[{"pet": "cutty"}, "cat"]
del family[{"pet": "cutty"}] # cutty left...
family.set[{"pet": "buddy"}, "dog"]
family[{"pet": "buddy"}] = "wolf" # buddy was not a dog
print[family.keys[]]
print[family.values[]]
for k, v in family.items[]:
print[k, v]
Chúng ta có thể sử dụng số nguyên, chuỗi, bộ dữ liệu làm khóa từ điển nhưng không thể sử dụng danh sách làm khóa của nó.
Khóa từ điển có thể là một chuỗi không?
Các khóa của từ điển có thể là bất kỳ loại bất biến, bao gồm: chuỗi, số và bộ dữ liệu: mydict = {"xin chào": "thế giới", 0: "A", 1: "B", "2": "Không phải là số" [1, 2, 3]: "Một tuple!"}
Để truy cập các phần tử từ điển, bạn có thể sử dụng các dấu ngoặc vuông quen thuộc cùng với khóa để có được giá trị của nó. Sau đây là một ví dụ đơn giản -
#!/usr/bin/python dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} print "dict['Name']: ", dict['Name'] print "dict['Age']: ", dict['Age']
Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau -
dict['Name']: Zara dict['Age']: 7
Nếu chúng tôi cố gắng truy cập một mục dữ liệu bằng khóa, không phải là một phần của từ điển, chúng tôi sẽ gặp lỗi như sau -
#!/usr/bin/python dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} print "dict['Alice']: ", dict['Alice']
Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau -
dict['Alice']: Traceback [most recent call last]: File "test.py", line 4, in print "dict['Alice']: ", dict['Alice']; KeyError: 'Alice'
Cập nhật từ điển
Bạn có thể cập nhật từ điển bằng cách thêm một mục nhập mới hoặc một cặp giá trị khóa, sửa đổi một mục nhập hiện có hoặc xóa một mục nhập hiện có như được hiển thị bên dưới trong ví dụ đơn giản-
#!/usr/bin/python dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} dict['Age'] = 8; # update existing entry dict['School'] = "DPS School"; # Add new entry print "dict['Age']: ", dict['Age'] print "dict['School']: ", dict['School']
Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau -
dict['Age']: 8 dict['School']: DPS School
Cập nhật từ điển
Bạn có thể cập nhật từ điển bằng cách thêm một mục nhập mới hoặc một cặp giá trị khóa, sửa đổi một mục nhập hiện có hoặc xóa một mục nhập hiện có như được hiển thị bên dưới trong ví dụ đơn giản-
Xóa các yếu tố từ điểndel statement. Following is a simple example −
#!/usr/bin/python dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} del dict['Name']; # remove entry with key 'Name' dict.clear[]; # remove all entries in dict del dict ; # delete entire dictionary print "dict['Age']: ", dict['Age'] print "dict['School']: ", dict['School']
Bạn có thể xóa các phần tử từ điển riêng lẻ hoặc xóa toàn bộ nội dung của từ điển. Bạn cũng có thể xóa toàn bộ từ điển trong một thao tác duy nhất.del dict dictionary does not exist any more −
dict['Age']: Traceback [most recent call last]: File "test.py", line 8, in print "dict['Age']: ", dict['Age']; TypeError: 'type' object is unsubscriptable
Để loại bỏ rõ ràng toàn bộ từ điển, chỉ cần sử dụng câu lệnh DEL. Sau đây là một ví dụ đơn giản - − del[] method is discussed in subsequent section.
Điều này tạo ra kết quả sau đây. Lưu ý rằng một ngoại lệ được nâng lên vì sau khi Del Dict Dictionary không tồn tại nữa -
Lưu ý - phương thức del [] được thảo luận trong phần tiếp theo.
Thuộc tính của khóa từ điển
Giá trị từ điển không có hạn chế. Chúng có thể là bất kỳ đối tượng Python tùy ý nào, đối tượng tiêu chuẩn hoặc đối tượng do người dùng xác định. Tuy nhiên, điều tương tự cũng không đúng với các phím. More than one entry per key not allowed. Which means no duplicate key is allowed. When duplicate keys encountered during assignment, the last assignment wins. For example −
dad = {"name": "dad"}
mom = {"name": "mom"}
boy = {"name": "son"}
girl = {"name": "daughter"}
# set
family = DictKeyDict[]
family[dad] = {"age": 44}
family[mom] = {"age": 43}
# or
family.set[dad, {"age": 44, "children": [boy, girl]}]
# or
family = DictKeyDict[
[dad, {"age": 44, "children": [boy, girl]}],
[mom, {"age": 43, "children": [boy, girl]}],
]
# update
family.update[[mom, {"age": 33}]] # oups sorry miss /!\ loose my children
family.set[{"pet": "cutty"}, "cat"]
del family[{"pet": "cutty"}] # cutty left...
family.set[{"pet": "buddy"}, "dog"]
family[{"pet": "buddy"}] = "wolf" # buddy was not a dog
print[family.keys[]]
print[family.values[]]
for k, v in family.items[]:
print[k, v]
0Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau -
dad = {"name": "dad"}
mom = {"name": "mom"}
boy = {"name": "son"}
girl = {"name": "daughter"}
# set
family = DictKeyDict[]
family[dad] = {"age": 44}
family[mom] = {"age": 43}
# or
family.set[dad, {"age": 44, "children": [boy, girl]}]
# or
family = DictKeyDict[
[dad, {"age": 44, "children": [boy, girl]}],
[mom, {"age": 43, "children": [boy, girl]}],
]
# update
family.update[[mom, {"age": 33}]] # oups sorry miss /!\ loose my children
family.set[{"pet": "cutty"}, "cat"]
del family[{"pet": "cutty"}] # cutty left...
family.set[{"pet": "buddy"}, "dog"]
family[{"pet": "buddy"}] = "wolf" # buddy was not a dog
print[family.keys[]]
print[family.values[]]
for k, v in family.items[]:
print[k, v]
1Có hai điểm quan trọng cần nhớ về các phím từ điển - Keys must be immutable. Which means you can use strings, numbers or tuples as dictionary keys but something like ['key'] is not allowed. Following is a simple example −
dad = {"name": "dad"}
mom = {"name": "mom"}
boy = {"name": "son"}
girl = {"name": "daughter"}
# set
family = DictKeyDict[]
family[dad] = {"age": 44}
family[mom] = {"age": 43}
# or
family.set[dad, {"age": 44, "children": [boy, girl]}]
# or
family = DictKeyDict[
[dad, {"age": 44, "children": [boy, girl]}],
[mom, {"age": 43, "children": [boy, girl]}],
]
# update
family.update[[mom, {"age": 33}]] # oups sorry miss /!\ loose my children
family.set[{"pet": "cutty"}, "cat"]
del family[{"pet": "cutty"}] # cutty left...
family.set[{"pet": "buddy"}, "dog"]
family[{"pet": "buddy"}] = "wolf" # buddy was not a dog
print[family.keys[]]
print[family.values[]]
for k, v in family.items[]:
print[k, v]
2Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau -
dad = {"name": "dad"}
mom = {"name": "mom"}
boy = {"name": "son"}
girl = {"name": "daughter"}
# set
family = DictKeyDict[]
family[dad] = {"age": 44}
family[mom] = {"age": 43}
# or
family.set[dad, {"age": 44, "children": [boy, girl]}]
# or
family = DictKeyDict[
[dad, {"age": 44, "children": [boy, girl]}],
[mom, {"age": 43, "children": [boy, girl]}],
]
# update
family.update[[mom, {"age": 33}]] # oups sorry miss /!\ loose my children
family.set[{"pet": "cutty"}, "cat"]
del family[{"pet": "cutty"}] # cutty left...
family.set[{"pet": "buddy"}, "dog"]
family[{"pet": "buddy"}] = "wolf" # buddy was not a dog
print[family.keys[]]
print[family.values[]]
for k, v in family.items[]:
print[k, v]
3[a] Không được phép vào một mục nhập mỗi khóa. Có nghĩa là không cho phép khóa trùng lặp. Khi các khóa trùng lặp gặp phải trong quá trình gán, nhiệm vụ cuối cùng sẽ thắng. Ví dụ -
[b] Khóa phải là bất biến. Điều đó có nghĩa là bạn có thể sử dụng các chuỗi, số hoặc bộ dữ liệu làm khóa từ điển nhưng không được phép là một thứ như ['key']. Sau đây là một ví dụ đơn giản -
1 | Python bao gồm các chức năng từ điển sau - Chức năng với mô tả |
2 | len[dict] CMP [dict1, dict2] |
3 | str[dict] So sánh các yếu tố của cả hai chế độ. |
4 | type[variable] Cho tổng chiều dài của từ điển. Điều này sẽ bằng với số lượng các mục trong từ điển. |
Tạo ra một biểu diễn chuỗi có thể in của một từ điển
1 | dict.clear[] Python bao gồm các phương pháp từ điển sau - |
2 | dict.copy[] Phương pháp với mô tả |
3 | dict.fromkeys[] Loại bỏ tất cả các yếu tố của Dictionary Dict |
4 | Trả lại một bản sao nông của Dictionary Dict Tạo một từ điển mới với các khóa từ SEQ và các giá trị được đặt thành giá trị. |
5 | dict.has_key[key] Dict.get [khóa, mặc định = Không] |
6 | dict.items[] Đối với khóa khóa, trả về giá trị hoặc mặc định nếu khóa không trong từ điển |
7 | dict.keys[] Trả về đúng nếu khóa trong dictict dictict, sai nếu không |
8 | Trả về một danh sách các cặp Tuple [khóa, giá trị] của Dict Trả về danh sách các khóa của Dictionary Dict |
9 | dict.update[dict2] dict.setDefault [khóa, mặc định = không] |
10 | dict.values[] Tương tự như get [], nhưng sẽ đặt Dict [key] = mặc định nếu khóa chưa có trong Dict |