# Python zipper method and open address method to achieve dictionary

Time：2021-3-19

Python dictionary is the most flexible built-in data structure type in Python besides list. Lists are ordered combinations of objects,A dictionary is an unordered collection of objects. The difference between the two is that the elements in the dictionary are accessed by keys, not by offsets.

Using subscript index in the list can quickly get the corresponding value, so we need to do two things:

• How to calculate a unique value for a key
• How to distribute the unique value uniformly and uniquely in a fixed length list

How to calculate a unique value for a key

Because the key of the dictionary is immutable and hashable, we can use the hash function to calculate the unique hash value corresponding to the key.

How to distribute the unique value uniformly and uniquely in a fixed length list

Hash is an algorithm that can map large data sets to fixed length data sets, so we can hash the hash values calculated above. It’s obvious that there will be hash conflicts after hashing. Therefore, we need to deal with this kind of conflict, once the unique value can be evenly and uniquely distributed. At this time, there are two ways to deal with hash conflict: zipper method and open address method

<!–more–>

## Zipper method

The hash address of the`k,v`The pairs are placed in the same single linked list. Here are two functions

• `put`Function:`put(slots, key, value)`To insert data into the dictionary
• `get`Function:`get(slots, key)`To read data from a dictionary.

You can also implement more functions, such as`dict.keys()`

``````#!/usr/bin/env python
# coding=utf-8

slots = []
slotsNum = 32
for _ in range(32):
slots.append([])

def put(slots, key, value):
i = hash(key) % slotsNum
pos = -1
for pos, (k, v) in enumerate(slots[i]):
if key == k:
break
else:
slots[i].append((key, value))
if pos >= 0 and pos < len(slots[i]):
slots[i][pos] = (key, value)

def get(slots, key):
i = hash(key) % slotsNum
for k, v in slots[i]:
if key == k:
return v
else:
Raise keyerror (key) ා throws an exception when it does not exist

put(slots, 'a', 1)
print(get(slots, 'a'))
put(slots, 'b' ,2)
print(get(slots, 'b'))
put(slots, 'a', 3)
print(get(slots, 'a'))``````

We will encapsulate these two functions into classes

``````class Dict:
def __init__(self, num):
self.__solts__ = []
self.num = num
for _ in range(num):
self.__solts__.append([])

def put(self, key, value):
i = hash(key) % self.num
for p, (k, v) in enumerate(self.__solts__[i]):
if k == key:
break
else:
self.__solts__[i].append((key, value))
return
self.__solts__[i][p] = (key, value)

def get(self, key):
i = hash(key) % self.num
for k, v in self.__solts__[i]:
if k == key:
return v
raise KeyError(key)

#Keys function
def keys(self):
ret = []
for solt in self.__solts__:
for k, _ in solt:
ret.append(k)
return ret``````

After being encapsulated as a class, the method and the`dict`It’s more like that

The open address method is used to deal with hash conflicts in Python dictionary internal implementation, which will be supplemented later

Remember to praise me!

We have carefully arranged video courses and e-books from entry-level, advanced and practical in all directions of computer. We can always find the learning materials you need according to the reasonable classification of the catalogue. What are you waiting for? Pay attention to download it!!!

If you don’t forget, there will be an echo. Please give me a compliment. Thank you very much.

I am a bright brother in the workplace, YY Senior Software Engineer, with four years of working experience. I refuse to be a leading slash programmer.

Listen to me, more progress, a shuttle of procedural life

If you are lucky enough to help you, please give me a “like” to pay attention to it. If you can comment on it and give me encouragement, I will be very grateful.

List of articles of workplace bright brother:More articles

All my articles and answers have cooperation with the copyright protection platform. The copyright belongs to brother Liang in the workplace. Without authorization, reprint must be investigated!

## Programming Xiaobai must understand the network principle

How is the network composed? Why can we easily surf the Internet now?Whether you are a computer major or not, you may always have such questions in your heart!And today we will solve this matter and tell you the real answer! Basic composition of network First, let’s look at this sentence Connect all computers together […]