- Dictionary là gì
Chúng lưu trữ không theo một trận tự hay thứ tự sắp xếp nào cả. Khai báo
chúng được định nghĩa bởi cặp dấu {}
Ví dụ:
net_device = {
"device_type": "ios",
"ip_addr": "192.168.0.1"
}
- Thêm/sửa/xóa phần tử trong dictionary
Code:
net_device = {
"device_type": "ios",
"ip_addr": "192.168.0.1"
}
print(net_device)
# thêm key vendor có giá trị juniper vào dictionary
net_device ["vendor"] = "juniper"
print(net_device)
# thay đổi giá trị của dict
net_device["ip_addr"] = "192.168.0.254"
print(net_device)
# lấy giá trị ra khỏi dict
net_device.pop("vendor")
print(net_device)
Kết quả
C:\python>python Demo.py{'device_type': 'ios', 'ip_addr': '192.168.0.1'}{'device_type': 'ios', 'ip_addr': '192.168.0.1', 'vendor': 'juniper'}{'device_type': 'ios', 'ip_addr': '192.168.0.254', 'vendor': 'juniper'}{'device_type': 'ios', 'ip_addr': '192.168.0.254'}C:\python>
- Phương thức update trong Dictionary
Code:
net_device = {
"device_type": "ios",
"ip_addr": "192.168.0.1",
"vendor" : "cisco",
}
print(net_device)
net_device_2 = {"model" : "sxr", "vendor" : "juniper"}
# giá trị của net_device_2 sẽ thêm vào net_device
net_device.update(net_device_2)
print(net_device)
Kết quả:
C:\python>python Demo.py{'device_type': 'ios', 'ip_addr': '192.168.0.1', 'vendor': 'cisco'}{'device_type': 'ios', 'ip_addr': '192.168.0.1', 'vendor': 'juniper', 'model': 'sxr'}C:\python>
Với ví dụ trên, giá trị của net_device_2 sẽ được thêm vào net_device, nếu
trong net_device đã tồn tại key thì giá trị của net_device_2
sẽ ghi đè lên giá
trị của net_device. Đó là lý do giá trị mới của key vendor trong
net_device là juniper thay cho cisco
- Lặp trong dictionary
Code:
net_device = {
"device_type": "ios",
"ip_addr": "192.168.0.1",
"vendor" : "cisco",
"mode": "881"
}
# in ra danh sách các key trong dictionary
for key in net_device.keys():
print (key)
print("-" * 20)
# in ra danh sách các giá trong dictionary
for value in net_device.values():
print (value)
print("-" * 20)
# in ra key, value thông qua items
for key, value in net_device.items():
print (key)
print (value)
print("-" * 20)
Kết quả:
C:\python>python Demo.pydevice_typeip_addrvendormode--------------------ios192.168.0.1cisco881--------------------device_typeios--------------------ip_addr192.168.0.1--------------------vendorcisco--------------------mode881--------------------C:\python>
- Merge two dictionary
Với phương thức update giúp chúng ta có thêm giá dictionary và nếu key đã
tồn tại trước đó thì giá trị của key đó sẽ bị thay thế bởi giá trị cập
nhật sau hay còn gọi là ghi đè.
Bây giờ chúng ta
xây dựng hàm
để cập thật thêm giá trị vào dictionary mà không ghi đè (như phương
thức update) nếu key đã tồn tại.
Code:
def mergeDict(dict1, dict2):
dict3 = {**dict1, **dict2} # thực hiện nối 2 dict, nếu trùng key thì giá trị sẽ là giá trị của dict đứng sau (trường hợp này dict2)
for key, value in dict3.items():
if key in dict1 and key in dict2: # 2 dict có key giống nhau
dict3[key] = [value , dict1[key]] # thêm value của dict1 vào dict 3
return dict3
dict1 = {'R1': {'Eth0/0': '192.168.11.1 255.255.255.0'}}
dict2 = {'R1': {'Eth0/1': '192.168.12.1 255.255.255.0'}}
dict3 = mergeDict(dict1, dict2) # gọi hàm merge
print('Dictionary sau khi merge:')
print(dict3)
Kết quả:
C:\python>python Demo.pyDictionary sau khi merge:{'R1': [{'Eth0/1': '192.168.12.1 255.255.255.0'}, {'Eth0/0': '192.168.11.1 255.255.255.0'}]}
Để kết quả dễ nhìn hơn chúng ta import thư viện pprint để in ra kết quả.
Code:
def mergeDict(dict1, dict2):
dict3 = {**dict1, **dict2} # thực hiện nối 2 dict, nếu trùng key thì giá trị sẽ là giá trị của dict đứng sau (trường hợp này dict2)
for key, value in dict3.items():
if key in dict1 and key in dict2: # 2 dict có key giống nhau
dict3[key] = [value , dict1[key]] # thêm value của dict1 vào dict 3
return dict3
dict1 = {'R1': {'Eth0/0': '192.168.11.1 255.255.255.0'}}
dict2 = {'R1': {'Eth0/1': '192.168.12.1 255.255.255.0'}}
dict3 = mergeDict(dict1, dict2) # gọi hàm merge
print('Dictionary sau khi merge:')
from pprint import pprint # import thư viện pprint
pprint(dict3)
Kết quả:
C:\python>python Demo.pyDictionary sau khi merge:{'R1': [{'Eth0/1': '192.168.12.1 255.255.255.0'},{'Eth0/0': '192.168.11.1 255.255.255.0'}]}
Xong!