Hash Map in Python
我想在Python中实现HashMap。 我想请用户输入。 根据他的输入,我正在从HashMap中检索一些信息。 如果用户输入HashMap的键,我想检索相应的值。
如何在Python中实现此功能?
1 2 3 4 5 6 | HashMap<String,String> streetno=new HashMap<String,String>(); streetno.put("1","Sachin Tendulkar"); streetno.put("2","Dravid"); streetno.put("3","Sehwag"); streetno.put("4","Laxman"); streetno.put("5","Kohli") |
Python字典是一种内置的类型,它支持键值对。
1 | streetno = {"1":"Sachine Tendulkar","2":"Dravid","3":"Sehwag","4":"Laxman","5":"Kohli"} |
以及使用dict关键字:
1 | streetno = dict({"1":"Sachine Tendulkar","2":"Dravid"}) |
要么:
1 2 | streetno = {} streetno["1"] ="Sachine Tendulkar" |
您想要的(在最初提出问题时)只是一个提示。提示:在Python中,您可以使用字典。
它是Python内置的。参见字典。
根据您的示例:
1 2 3 4 5 | streetno = {"1":"Sachine Tendulkar", "2":"Dravid", "3":"Sehwag", "4":"Laxman", "5":"Kohli" } |
然后,您可以像这样访问它:
1 | sachine = streetno["1"] |
还值得一提:它可以使用任何非可变数据类型作为键。也就是说,它可以使用元组,布尔值或字符串作为键。
1 2 3 4 5 | streetno = { 1 :"Sachin Tendulkar", 2 :"Dravid", 3 :"Sehwag", 4 :"Laxman", 5 :"Kohli" } |
并获取值:
1 | name = streetno.get(3,"default value") |
要么
1 | name = streetno[3] |
那就是使用数字作为键,在数字两边加上引号以使用字符串作为键。
哈希图是Python内置的,它们称为字典:
1 2 | streetno = {} #create a dictionary called streetno streetno["1"] ="Sachin Tendulkar" #assign value to key"1" |
用法:
1 2 | "1" in streetno #check if key"1" is in streetno streetno["1"] #get the value from key"1" |
请参阅文档以获取更多信息,例如内置方法等。它们很棒,并且在Python程序中非常常见(毫不奇怪)。
这是使用python的Hash Map的实现
为了简单起见,哈希映射的大小固定为16。
这可以轻松更改。
重新哈希不在此代码范围内。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | class Node: def __init__(self, key, value): self.key = key self.value = value self.next = None class HashMap: def __init__(self): self.store = [None for _ in range(16)] def get(self, key): index = hash(key) & 15 if self.store[index] is None: return None n = self.store[index] while True: if n.key == key: return n.value else: if n.next: n = n.next else: return None def put(self, key, value): nd = Node(key, value) index = hash(key) & 15 n = self.store[index] if n is None: self.store[index] = nd else: if n.key == key: n.value = value else: while n.next: if n.key == key: n.value = value return else: n = n.next n.next = nd hm = HashMap() hm.put("1","sachin") hm.put("2","sehwag") hm.put("3","ganguly") hm.put("4","srinath") hm.put("5","kumble") hm.put("6","dhoni") hm.put("7","kohli") hm.put("8","pandya") hm.put("9","rohit") hm.put("10","dhawan") hm.put("11","shastri") hm.put("12","manjarekar") hm.put("13","gupta") hm.put("14","agarkar") hm.put("15","nehra") hm.put("16","gawaskar") hm.put("17","vengsarkar") print(hm.get("1")) print(hm.get("2")) print(hm.get("3")) print(hm.get("4")) print(hm.get("5")) print(hm.get("6")) print(hm.get("7")) print(hm.get("8")) print(hm.get("9")) print(hm.get("10")) print(hm.get("11")) print(hm.get("12")) print(hm.get("13")) print(hm.get("14")) print(hm.get("15")) print(hm.get("16")) print(hm.get("17")) |
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | sachin sehwag ganguly srinath kumble dhoni kohli pandya rohit dhawan shastri manjarekar gupta agarkar nehra gawaskar vengsarkar |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | class HashMap: def __init__(self): self.size = 64 self.map = [None] * self.size def _get_hash(self, key): hash = 0 for char in str(key): hash += ord(char) return hash % self.size def add(self, key, value): key_hash = self._get_hash(key) key_value = [key, value] if self.map[key_hash] is None: self.map[key_hash] = list([key_value]) return True else: for pair in self.map[key_hash]: if pair[0] == key: pair[1] = value return True else: self.map[key_hash].append(list([key_value])) return True def get(self, key): key_hash = self._get_hash(key) if self.map[key_hash] is not None: for pair in self.map[key_hash]: if pair[0] == key: return pair[1] return None def delete(self, key): key_hash = self._get_hash(key) if self.map[key_hash] is None : return False for i in range(0, len(self.map[key_hash])): if self.map[key_hash][i][0] == key: self.map[key_hash].pop(i) return True def print(self): print('---Phonebook---') for item in self.map: if item is not None: print(str(item)) h = HashMap() |
在这种情况下,Python Counter也是一个不错的选择:
1 2 3 4 5 | from collections import Counter counter = Counter(["Sachin Tendulkar","Sachin Tendulkar","other things"]) print(counter) |
这将返回一个字典,其中包含列表中每个元素的计数:
1 | Counter({'Sachin Tendulkar': 2, 'other things': 1}) |