Hướng dẫn python built in hashmap - python được xây dựng trong bản đồ băm

Khi nói đến lợi thế ngôn ngữ lập trình, cả Java và Python đều có những điểm mạnh mẽ của riêng họ. Một trong những tính năng hữu ích nhất được cung cấp bởi cả Java và Python là Hashmap và Dictionary. Các trường hợp sử dụng cho cả hai đều tương tự nhau. Về cơ bản, bất cứ khi nào chúng ta cần một cặp giá trị chính để được lưu trữ, các cấu trúc dữ liệu này được sử dụng trong các ngôn ngữ tương ứng của chúng. Mặc dù cả hai dường như đang thực hiện cùng một chức năng, bài viết này giải thích làm thế nào cả hai khác nhau trong nội bộ.

Nguyên tắc cơ bản::

Java: Nó sử dụng nguyên tắc băm và sử dụng nội bộ Hashcode làm cơ sở để lưu trữ các cặp giá trị chính. Lấy nó trong thời gian không đổi O (1). : It uses principle of hashing and internally uses hashcode as base for storing key value pairs. With the help of hashcode , HashMap distributes the objects across array buckets(similar objects grouped together) in such a way that HashMap puts the object and retrieves it in constant time O(1).

Python: Nó sử dụng nguyên tắc hashtable có thể sử dụng được trong nền. Các khóa được cung cấp cho từ điển là các đối tượng có hàm băm được xây dựng. Với sự trợ giúp của hàm băm, các khóa được phân phối đều trên một mảng. Giả sử rằng bạn lưu trữ các khóa mà tất cả đều có các giá trị băm khác nhau, điều này có nghĩa là từ điển mất thời gian liên tục - O (1), trong ký hiệu khoa học máy tính - để lấy chìa khóa.: It uses the principle of re sizable hashtable in the background. The keys given to dictionaries are objects which have an in built hash function. With help of hash function, the keys gets distributed evenly across an array. Assuming that you’re storing keys that all have different hash values, this means that dictionaries take constant time – O(1), in computer science notation – to retrieve a key.

HashCode:

Java: Hashcode là giá trị số nguyên xác định đối tượng và được xây dựng bằng phương thức hashcode () của đối tượng. , trong trường hợp đó, để xác định duy nhất một đối tượng, các thuộc tính khác của đối tượng được sử dụng. Phương thức HashCode () xem xét các thuộc tính đối tượng, thao tác trên nó và đưa ra giá trị số nguyên cụ thể đại diện cho đối tượng đó. Hashcode về cơ bản được sử dụng để phân phối và sắp xếp các đối tượng trên bảng HashMap.: Hashcode is integer value that identifies the object and is built using object's hashcode() method.Every object has hashcode() method, when called, it returns integer value that represents object. Two different objects can have same identifier/hashcode, in that case, to uniquely identify an object, other properties of object is used. hashcode() method looks into object properties, manipulate on it and come up with specific integer value which represents that object. hashcode is basically used for distributing and arranging objects across hashmap table.

Python: Trong các giá trị băm Python là các số nguyên được sử dụng để nhanh chóng so sánh các khóa từ điển trong khi tìm kiếm một từ điển. loại. Phương thức __hash __ () được đặt theo mặc định cho bất kỳ đối tượng nào. Chỉ các đối tượng bất biến mới có thể được băm. Vì vậy, các khóa trong từ điển phải là bất biến (int, float, bool, chuỗi, unicode, tuple). Trong Python, hai đối tượng khác nhau có thể dẫn đến cùng một giá trị băm. Ví dụ: Số nguyên 2 và Float 2.0. Điều này được gọi là va chạm. Python không có chức năng băm có thể quản lý vấn đề này. & Nbsp;: In python hash values are integers used to quickly compare dictionary keys while looking up a dictionary.On creating a dictionary, is being called by it.The Python hash() function calls __hash__() method internally to operate on different types of data types. __hash__() method is set by default for any object. Only immutable objects can be hashed. So the Keys in the dictionary should be immutable(int, float, bool, string, unicode, tuple). In python two different objects may result in the same hash value. Eg: integer 2 and float 2.0. This is called as collision. Python doesn’t have a hash function which can manage this problem. 

Làm việc cuối cùng:

Java: Mã băm của khóa được tạo và đây được sử dụng làm chỉ mục để lưu trữ khóa này trong một mảng hashmap sẵn có. Phương pháp HashCode giúp phân phối các đối tượng vào một số loại hoặc thùng nhất định. Nhiều đối tượng có thể kết thúc trong cùng một nhóm nhưng đã được phân loại và chúng ta có ít đối tượng hơn để tìm kiếm ngay bây giờ. Phương thức Aquals xuất hiện ngay bây giờ. So sánh các thuộc tính nội bộ đối tượng. Mã băm được sử dụng làm chỉ mục cho mảng nội bộ HashMap Chúng tôi lấy giá trị tương ứng của khóa. Trong trường hợp các khóa có trong cùng một nhóm, một danh sách được liên kết sẽ được tạo cho chỉ mục băm này và các giá trị của các khóa tương ứng được lưu trữ ở đây.: The hash code of the key is generated and this is used as index for storing this key in an inbuilt HashMap array. Hashcode method helps in distributing the objects into certain categories or buckets. Multiple objects can end up in same bucket but has been categorized and we have less objects to search now.Equals method comes into picture now .This helps us to look within the objects that have the same hashcodes and get the object we are interested in by comparing object internal properties. The hash code is used as an index for hashmap internal array we retrieve corresponding value of the key. In case the keys get in the same bucket ,a linked list will be created for this hash index and the values of the respective keys are stored here .

Python: Chức năng băm tốt giảm thiểu số lượng va chạm, ví dụ: Các phím khác nhau có cùng băm. Python không có loại hàm băm này. Vì vậy, nó sử dụng một phương pháp khác nhau để sử dụng HashCode làm chỉ mục của mảng sẵn có. Nếu một mảng có kích thước X được sử dụng để lưu trữ các cặp khóa/giá trị thì chúng tôi sử dụng mặt nạ bằng X-1 để tính chỉ số khe của cặp trong mảng. Điều này làm cho việc tính toán của chỉ số khe nhanh. Nếu vẫn còn một vụ va chạm, nó không tạo ra một danh sách được liên kết vì nó sẽ tăng thời gian tra cứu. Vì vậy, đối với vấn đề này, Python sử dụng địa chỉ mở. Địa chỉ mở là một phương pháp giải quyết va chạm trong đó sử dụng thăm dò. Trong trường hợp chúng tôi có hai khóa có cùng một mã băm, thì cái đầu tiên đã chiếm một khe trong mảng, nó thăm dò chỉ mục miễn phí tiếp theo cho khóa thứ hai có cùng một băm. Thêm một cặp khóa/giá trị sẽ trung bình O (1) và hoạt động tra cứu quá.: A good hash function minimizes the number of collisions e.g. different keys having the same hash. Python does not have this kind of hash function. So it uses a different methodology for using the hashcode as index of the inbuilt array. If an array of size x is used to store the key/value pairs then we use a mask equal to x-1 to calculate the slot index of the pair in the array. This makes the computation of the slot index fast. If still a collision exist , it does not create a linked list as it would increase the lookup time. So for this problem python uses Open Addressing. Open addressing is a method of collision resolution where probing is used. In case we had two keys having same hashcode,the first one has already occupied a slot in the array ,it probes for the next free index for the second key with the same hashcode. Adding a key/value pair will average O(1) and the lookup operation too.

Vì vậy, đây là sự khác biệt giữa hai cấu trúc dữ liệu trong Java và Python .both rất hữu ích cho các giải pháp kinh doanh khác nhau. Việc sử dụng tốt nhất ngôn ngữ lập trình cuối cùng được để lại cho người dùng.

MụC lục

NHÓM Phát Triển Của Chún tôma vừa ra mắt Trang web Langlearning.net Học tiếng ah Là một Trang web ĐượC Viết Trênn Côning Nghề Flutter Vì Vậy Hỗ Trợ Rất Tốt Cho ngườ Hiện tại Trang web Đang Tiếp TụC ĐượC CậP NHậP NộI DUNG Cho Phong Phú Và Mong Các bạn Nghé Th Họ Hãy Theo dõi chún tôma trênn fanpage Để NHận ĐượC Thôn BÁO MỗI KHI đó là BÀi VIếT Facebook
Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất.
Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi. Hãy theo dõi chúng tôi trên Fanpage để nhận được thông báo mỗi khi có bài viết mới. Facebook

1- Python Dictionary

Trong Python, dictionary (bộ từ điển) là một kiểu dữ liệu, nó là một danh sách các phần tử (element), mà mỗi phần tử là một cặp khóa và giá trị (Key & value), nó khá giống với khái niệm Map trong Java. Python, dictionary (bộ từ điển) là một kiểu dữ liệu, nó là một danh sách các phần tử (element), mà mỗi phần tử là một cặp khóa và giá trị (Key & value), nó khá giống với khái niệm Map trong Java.

Các dictionary đều là là đối tượng của lớp dict. dict.

Để viết một dictionary sử dụng cặp dấu móc { } , và viết các phần tử bên trong, các phần tử phân cách nhau bởi đấu phẩy. Mỗi phần tử là một cặp khóa và giá trị ngăn cách nhau bởi dấu hai chấm ( : )

Ví dụ:


# Dictionary

myinfo =  {"Name": "Tran", "Age": 37, "Address" : "Vietnam"  }

Bạn cũng có thể tạo một đối tượng dictionary từ phương thức khởi tạo (constructor) của lớp dict. dict.

createDictionaryFromClass.py


# Tạo một dictionary thông qua constructor của lớp dict.
mydict = dict()

mydict["E01"] =  "John"
mydict["E02"] =  "King"

print ("mydict: ", mydict)

Output:


mydict: {'E01': 'John', 'E02': 'King'}

Đặc điểm của giá trị (value) trong dictionary:

  • Mỗi phần tử (element) của dictionary là một cặp (khóa và giá trị), giá trị có thể là một kiểu bất kỳ (string, số, các kiểu người dùng tự định nghĩa,....), và cho phép trùng lặp.

Đặc điểm của khóa (key) trong dictionary.

  • Khóa trong dictionary phải là kiểu bất biến (immutable). Như vậy nó có thể là string, số, Tuple, ....
  • Một số kiểu không được phép, chẳng hạn List (Danh sách), vì List là kiểu dữ liệu biến đổi (mutable).List (Danh sách), vì List là kiểu dữ liệu biến đổi (mutable).
  • Các khóa trong dictionary không được phép trùng lặp.

Ví dụ:

dictionaryExample.py


# Dictionary
myinfo =  {"Name": "Tran", "Age": 37, "Address" : "Vietnam"  }

print ("myinfo['Name'] = ", myinfo["Name"])
print ("myinfo['Age'] = ", myinfo["Age"]) 
print ("myinfo['Address'] = ", myinfo["Address"])

Output:


myinfo['Name'] = Tran
myinfo['Age'] = 37
myinfo['Address'] = Vietnam

Đặc điểm của giá trị (value) trong dictionary:

Mỗi phần tử (element) của dictionary là một cặp (khóa và giá trị), giá trị có thể là một kiểu bất kỳ (string, số, các kiểu người dùng tự định nghĩa,....), và cho phép trùng lặp.

updateDictionaryExample.py


# Dictionary 
myinfo =  {"Name": "Tran", "Age": 37, "Address" : "Vietnam"  }

# Cập nhập giá trị cho khóa (key) 'Address'
myinfo["Address"] = "HCM Vietnam"

# Thêm một phần tử mới với khóa (key) là 'Phone'.
myinfo["Phone"] = "12345" 

print ("Element count: ", len(myinfo) ) 
print ("myinfo['Name'] = ", myinfo["Name"]) 
print ("myinfo['Age'] = ", myinfo["Age"]) 
print ("myinfo['Address'] = ", myinfo["Address"]) 
print ("myinfo['Phone'] = ", myinfo["Phone"])

Output:


Element count: 4
myinfo['Name'] = Tran
myinfo['Age'] = 37
myinfo['Address'] = HCM Vietnam
myinfo['Phone'] = 12345

Đặc điểm của giá trị (value) trong dictionary:

Mỗi phần tử (element) của dictionary là một cặp (khóa và giá trị), giá trị có thể là một kiểu bất kỳ (string, số, các kiểu người dùng tự định nghĩa,....), và cho phép trùng lặp.

  1. Đặc điểm của khóa (key) trong dictionary. del
  2. Khóa trong dictionary phải là kiểu bất biến (immutable). Như vậy nó có thể là string, số, Tuple, ....__delitem__(key)

deleteDictionaryExample.py


# (Key,Value) = (Tên, Số điện thoại)
contacts = {"John": "01217000111", \
            "Tom": "01234000111", \
            "Addison":"01217000222", "Jack":"01227000123"}

print ("Contacts: ", contacts)
print ("\n")
print ("Delete key = 'John' ")

# Xóa một phần tử ứng với khóa 'John'
del contacts["John"]  
print ("Contacts (After delete): ", contacts) 
print ("\n")
print ("Delete key = 'Tom' ")

# Xóa một phần tử ứng với khóa 'Tom'
contacts.__delitem__( "Tom")  
print ("Contacts (After delete): ", contacts)  
print ("Clear all element")

# Xóa toàn bộ các phần tử.
contacts.clear() 
print ("Contacts (After clear): ", contacts)

# Xóa luôn dictionary 'contacts' khỏi bộ nhớ 
del contacts 
# Lỗi xẩy ra khi truy cập vào biến không tồn tại trên bộ nhớ
print ("Contacts (After delete): ", contacts)

Một số kiểu không được phép, chẳng hạn List (Danh sách), vì List là kiểu dữ liệu biến đổi (mutable).

Các khóa trong dictionary không được phép trùng lặp.2- Cập nhập Dictionary
Dictionary cho phép cập nhập giá trị ứng với một khóa nào đó, nó thêm mới một phần tử nếu khóa đó không tồn tại trên dictionary.

3- Xóa dictionary

Có 2 cách để loại bỏ một phần tử ra khỏi một dictionary.

Sử dụng toán tử del

Sử dụng phương thức __delitem__(key)

4- Các hàm với với Dictionary 'dict'.

HàmMô tảdict, nó sẽ trả về danh sách các thành viên của lớp dict.

functionDictionaryExample.py


contacts = {"John": "01217000111" ,"Addison": "01217000222","Jack": "01227000123"} 
print ("contacts: ", contacts)  
print ("Element count: ", len(contacts) ) 

contactsAsString = str(contacts)  
print ("str(contacts): ", contactsAsString )

# Một đối tượng đại diện lớp 'dict'.
aType = type(contacts) 
print ("type(contacts): ", aType )

# Hàm dir(dict) trả về các thành viên của lớp 'dict'. 
print ("dir(dict): ", dir(dict) )

# ------------------------------------------------------------------------------------
# ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', 
#  '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', 
#  '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', 
#  '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
#  '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 
#  'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 
#  'setdefault', 'update', 'values']
# -------------------------------------------------------------------------------------

len(dict)

  • Trả về số phần tử của dict.

str(dict)

Hàm chuyển đổi ra một string biểu diễn dictionary.