Hash Map in Python

后端 未结 9 1048
礼貌的吻别
礼貌的吻别 2020-11-27 10:59

I want to implement a HashMap in Python. I want to ask a user for an input. depending on his input I am retrieving some information from the HashMap. If the user enters a k

相关标签:
9条回答
  • 2020-11-27 11:09

    Python Counter is also a good option in this case:

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

    This returns a dict with the count of each element in the list:

    Counter({'Sachin Tendulkar': 2, 'other things': 1})
    
    0 讨论(0)
  • 2020-11-27 11:14

    All you wanted (at the time the question was originally asked) was a hint. Here's a hint: In Python, you can use dictionaries.

    0 讨论(0)
  • 2020-11-27 11:16

    Here is the implementation of the Hash Map using python For the simplicity hash map is of a fixed size 16. This can be changed easily. Rehashing is out of scope of this 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"))
    

    Output:

    sachin
    sehwag
    ganguly
    srinath
    kumble
    dhoni
    kohli
    pandya
    rohit
    dhawan
    shastri
    manjarekar
    gupta
    agarkar
    nehra
    gawaskar
    vengsarkar
    
    0 讨论(0)
  • 2020-11-27 11:19

    It's built-in for Python. See dictionaries.

    Based on your example:

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

    You could then access it like so:

    sachine = streetno["1"]
    

    Also worth mentioning: it can use any non-mutable data type as a key. That is, it can use a tuple, boolean, or string as a key.

    0 讨论(0)
  • 2020-11-27 11:21
    streetno = { 1 : "Sachin Tendulkar",
                2 : "Dravid",
                3 : "Sehwag",
                4 : "Laxman",
                5 : "Kohli" }
    

    And to retrieve values:

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

    Or

    name = streetno[3]
    

    That's using number as keys, put quotes around the numbers to use strings as keys.

    0 讨论(0)
  • 2020-11-27 11:22

    In python you would use a dictionary.

    It is a very important type in python and often used.

    You can create one easily by

    name = {}
    

    Dictionaries have many methods:

    # 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']}
    

    You can not influence the order of a dict.

    0 讨论(0)
提交回复
热议问题