/*auto readmore*/ /*auto readmore*/ /* an hien script*/ // an hien password /*an hien ma chuong trinh cong tru */ /*Scrollbox thanh cuon*/ /***Nhung CODE***/ /* dòng xanh dòng trắng */ /* https://cdnjs.com/libraries/prism lay thu vien, can vao ten file ma goi 1. copy link vao vi du:prism-python.min.js 2. ten ngon nua la python */ /*=== New posts ===*/ /*header slider*/ /*=== bai viet lien quan===*/ /*===tabcode===*/

Học Python Qua Ví Dụ #016 - Dictionary Trong Python

  • Dictionary là gì
Kiểu dữ liệu lưu trữ trong dictionary gồm các giá trị Key và Value.


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.py
device_type
ip_addr
vendor
mode
--------------------
ios
192.168.0.1
cisco
881
--------------------
device_type
ios
--------------------
ip_addr
192.168.0.1
--------------------
vendor
cisco
--------------------
mode
881
--------------------

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.py
Dictionary 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.py
Dictionary 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!


No comments:

Post a Comment

/*header slide*/