私はPythonでHashMapを実装したいです。ユーザーに入力をお願いしたいのですが。彼の入力によっては、HashMapから情報を取得しています。ユーザーがHashMapのキーを入力したら、対応する値を取得したいです。
Pythonでこの機能をどのように実装しますか?
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辞書 はキーと値のペアをサポートする組み込み型です。
streetno = {"1":"Sachine Tendulkar", "2":"Dravid", "3":"Sehwag", "4":"Laxman","5":"Kohli"}
dictキーワードを使うのと同様に:
streetno = dict({"1":"Sachine Tendulkar", "2":"Dravid"})
または
streetno = {}
streetno["1"] = "Sachine Tendulkar"
(質問が最初に尋ねられた時点で)あなたが望んでいたのはヒントだけでした。ヒントは次のとおりです。Pythonでは、 辞書 を使用できます。
これはPython用に組み込まれています。 辞書 を参照してください。
あなたの例に基づいて:
streetno = {"1": "Sachine Tendulkar",
"2": "Dravid",
"3": "Sehwag",
"4": "Laxman",
"5": "Kohli" }
そうすると次のようにアクセスできます。
sachine = streetno["1"]
言及する価値があります:それはキーとして変更不可能なデータ型を使用することができます。つまり、Tuple、boolean、またはstringをキーとして使用できます。
streetno = { 1 : "Sachin Tendulkar",
2 : "Dravid",
3 : "Sehwag",
4 : "Laxman",
5 : "Kohli" }
そして値を取得する:
name = streetno.get(3, "default value")
または
name = streetno[3]
それはキーとして数字を使用しています、キーとして文字列を使用するために数字の周りに引用符を入れてください。
ハッシュマップはPythonに組み込まれていて、 辞書 と呼ばれます。
streetno = {} #create a dictionary called streetno
streetno["1"] = "Sachin Tendulkar" #assign value to key "1"
使用法:
"1" in streetno #check if key "1" is in streetno
streetno["1"] #get the value from key "1"
詳細については、ドキュメントを参照してください。組み込みメソッドなどそれらは素晴らしく、Pythonプログラムでは非常に一般的です(驚くことではありません)。
これはpythonを使ったハッシュマップの実装です。簡単にするために、ハッシュマップは固定サイズ16です。これは簡単に変更できます。再ハッシュはこのコードの範囲外です。
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"))
出力:
sachin
sehwag
ganguly
srinath
kumble
dhoni
kohli
pandya
rohit
dhawan
shastri
manjarekar
gupta
agarkar
nehra
gawaskar
vengsarkar
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 も良い選択肢です。
from collections import Counter
counter = Counter(["Sachin Tendulkar", "Sachin Tendulkar", "other things"])
print(counter)
これはリストの各要素の数を含む辞書を返します。
Counter({'Sachin Tendulkar': 2, 'other things': 1})