首页 > 解决方案 > 如何打印自定义哈希表?

问题描述

我正在创建一个包裹递送程序。我创建了一个自定义链接哈希表,以及一个从 CSV 读取数据并将数据插入哈希表的包类。如何打印新创建的自定义哈希表以确保它正确输入数据?我尝试了多种不同的方法,最终根本无法打印。感谢您的时间。

这是我正在使用的哈希表 .insert 方法:

class HashTable:

# Constructor
# Space-time complexity is O(1)
def __init__(self, initial_capacity=40):
    # initialize the hash table with empty bucket list entries.
    self.table = []
    for i in range(initial_capacity):
        self.table.append([])

# Created this private method to create hash keys in the other methods
# Space-time complexity is O(1)
def _get_key(self, key):
    hash_key = int(key) % len(self.table)
    return hash_key 

# Insert a new package value into the hash table
# Space-time complexity is O(N)
def insert(self, key, value):
    hash_key = self._get_key(key)
    key_value = [key, value]

    if self.table[hash_key] is None:
        self.table[hash_key] = list([key_value])
        return True
    else:
        for i in self.table[hash_key]:
            if i[0] == key:
                i[1] = key_value
                return True
        self.table[hash_key].append(key_value)
        return True

包类:

import csv
from HashTable import HashTable


class Package:
    def __init__(self, package_id, address, delivery_time):
        self.package_id = package_id
        self.address = address
        self.delivery_time = delivery_time


IN_ROUTE = 'in_route'
DELIVERED = 'delivered'
AVAILABLE_AT_HUB = 'at_hub'

# Open file
with open('WGUData.csv') as packages_file:
    # create a reader object
    reader = csv.reader(packages_file, delimiter=',')

    # Inserts data into table
    insert_into_package_hash = HashTable()

    package_list = []
    # read each line of the file
    for row in reader:
        package = Package(row[0], row[1], row[5])

        package_list.append(package)

        key = package.package_id
        value = (package.address, package.delivery_time)

        insert_into_package_hash.insert(key, value)

对我有意义的印刷品:

        print(insert_into_package_hash)

但这会返回错误,重复:

<HashTable.HashTable object at 0x0000022BE6FDF370>
<HashTable.HashTable object at 0x0000022BE6FDF370>

标签: pythonpython-3.x

解决方案


如果您想要对象(HashTable)的字符串表示,则需要__str__在类定义中重载该方法。

就像是

def __str__(self):
     return "foo"

但将 HashTable 实例中的数据作为格式化字符串返回。


推荐阅读