Hash-kaart in Python

Ik wil een HashMap in Python implementeren. Ik wil een gebruiker om input vragen. afhankelijk van zijn input haal ik wat informatie uit de HashMap. Als de gebruiker een sleutel van de HashMap invoert, wil ik de bijbehorende waarde ophalen.

Hoe implementeer ik deze functionaliteit in 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")

Antwoord 1, autoriteit 100%

Python-woordenboekis een ingebouwd type dat sleutel-waardeparen ondersteunt .

streetno = {"1": "Sachin Tendulkar", "2": "Dravid", "3": "Sehwag", "4": "Laxman", "5": "Kohli"}

evenals het gebruik van het dict-zoekwoord:

streetno = dict({"1": "Sachin Tendulkar", "2": "Dravid"}) 

of:

streetno = {}
streetno["1"] = "Sachin Tendulkar" 

Antwoord 2, autoriteit 11%

Alles wat je wilde (op het moment dat de vraag oorspronkelijk werd gesteld) was een hint. Hier is een hint: in Python kun je woordenboekengebruiken.


Antwoord 3, autoriteit 9%

Het is ingebouwd voor Python. Zie woordenboeken.

Op basis van uw voorbeeld:

streetno = {"1": "Sachine Tendulkar",
            "2": "Dravid",
            "3": "Sehwag",
            "4": "Laxman",
            "5": "Kohli" }

Je zou het dan als volgt kunnen openen:

sachine = streetno["1"]

Ook het vermelden waard: het kan elk niet-veranderbaar gegevenstype als sleutel gebruiken. Dat wil zeggen, het kan een tuple, boolean of string als sleutel gebruiken.


Antwoord 4, autoriteit 7%

streetno = { 1 : "Sachin Tendulkar",
            2 : "Dravid",
            3 : "Sehwag",
            4 : "Laxman",
            5 : "Kohli" }

En om waarden op te halen:

name = streetno.get(3, "default value")

Of

name = streetno[3]

Dat is getallen als toetsen gebruiken, aanhalingstekens om de getallen zetten om strings als toetsen te gebruiken.


Antwoord 5, autoriteit 6%

Hash-kaarten zijn ingebouwd in Python, ze worden woordenboekengenoemd :

streetno = {}                        #create a dictionary called streetno
streetno["1"] = "Sachin Tendulkar"   #assign value to key "1"

Gebruik:

"1" in streetno                      #check if key "1" is in streetno
streetno["1"]                        #get the value from key "1"

Zie de documentatie voor meer informatie, b.v. ingebouwde methoden enzovoort. Ze zijn geweldig, en heel gebruikelijk in Python-programma’s (niet verwonderlijk).


Antwoord 6, Autoriteit 6%

Hier is de implementatie van de hash-kaart met Python
Voor de Simplicity Hash-kaart is van een vaste grootte 16.
Dit kan gemakkelijk worden gewijzigd.
Rehashing is buiten de reikwijdte van deze code.

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"))

Uitgang:

sachin
sehwag
ganguly
srinath
kumble
dhoni
kohli
pandya
rohit
dhawan
shastri
manjarekar
gupta
agarkar
nehra
gawaskar
vengsarkar

Antwoord 7, Autoriteit 4%

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()

Antwoord 8, autoriteit 3%

Python Telleris in dit geval ook een goede optie :

from collections import Counter
counter = Counter(["Sachin Tendulkar", "Sachin Tendulkar", "other things"])
print(counter)

Dit geeft een dictaat terug met de telling van elk element in de lijst:

Counter({'Sachin Tendulkar': 2, 'other things': 1})

Antwoord 9

In python zou je een woordenboek gebruiken.

Het is een zeer belangrijk type in python en wordt vaak gebruikt.

Je kunt er gemakkelijk een maken door

name = {}

Woordenboeken hebben veel methoden:

# add entries:
>>> name['first'] = 'John'
>>> name['second'] = 'Doe'
>>> name
{'first': 'John', 'second': 'Doe'}
# you can store all objects and datatypes as value in a dictionary
# as key you can use all objects and datatypes that are hashable
>>> name['list'] = ['list', 'inside', 'dict']
>>> name[1] = 1
>>> name
{'first': 'John', 'second': 'Doe', 1: 1, 'list': ['list', 'inside', 'dict']}

U kunt de volgorde van een dict niet beïnvloeden.


Antwoord 10

A Dictionary in Python is de beste manier om dit te implementeren . We kunnen het volgende woordenboek maken met behulp van de gegeven <key,value>paren:

d = {"1": "Sachin Tendulkar", "2": "Dravid", "3": "Sehwag", "4": "Laxman", "5": "Kohli"}

Om de waarde van een bepaalde sleutel te extraheren, kunnen we rechtstreeks gebruiken d[key]:

name = d["1"] # The value of name would be "Sachin Tendulkar" here

Other episodes