Цель: создать класс python, который примет пример строки «maple» и перевести его в соответствующий код вида «AC».Работа с большими словарями в python? (производительность и сбой)
Проблема: Я создал словарь, содержащий все вводы строк и соответствующий им код вида, который будет использоваться для перевода. Однако я не могу понять, как реализовать словарь без сбоев python. Словарь довольно большой (примерно 4000 записей в формате: {'common name example1': 'species code example1', 'common name example2':'species code example2', ... }
, как показано ниже. Я думаю, что мой код работает теоретически, но он занимает такой большой объем памяти, что python продолжает сбой.
Вот мой код :
import string
class exportSpec:
def __init__(self, exportSpecobj):
self.set(self.sani(exportSpecobj))
def get(self):
return self.exportSpecobj
def set(self, exportSpecobj_pre_sani):
self.exportSpecobj = exportSpecobj_pre_sani
def puncremove(self, common):
for c in string.punctuation:
common = common.replace(c,"")
return common
def lower(self, common):
common = self.lower()
return common
def codeChange(self, saniCode):
codeDict = {'balsam fir':'ABBA', 'white fir':'ABCO', 'maple':'AC', 'freeman maple':'ACFR', 'amur maple':'ACGI', 'rocky mountain maple':'ACGL', 'boxelder':'ACNE', 'norway maple':'ACPL', 'red maple':'ACRU', 'silver maple':'ACSA1', 'sugar maple':'ACSA2', 'tatar maple':'ACTA', 'ohio buckeye':'AEGL', 'horsechestnut':'AEHI', 'serviceberry':'AM', 'broadleaf deciduous large':'BDL OTHER', 'broadleaf deciduous medium':'BDM OTHER', 'broadleaf deciduous small':'BDS OTHER'}
# the dictionary^^ is much bigger but I just showed the first 20ish values to show my code
check = codeDict.has_key(saniCode)
if check == "True":
print("New code was found")
return codeDict[saniCode]
else:
print("Error finding code in Dictionary")
print(saniCode)
output = 0
return output
def sani(self, exportSpecObj):
if exportSpecObj is None:
output = 0
return output
else:
exportSpecObjlcpr = self.lower(self.puncremove(exportSpecObj))
saniCode = codeChange(exportSpecObjlcpr)
return saniCode
так что я думаю, что мой код работает теоретически вход приходит и получает продезинфицировать с методами ниже и puncremove, чтобы удалить знаки препинания и перевести в нижний регистр, так что вход может быть найден в словаре должны быть возвращены. как значение, найденное в словаре из ввода ключа.
Если есть более простой способ сделать это, не используя словарь, который тоже будет работать, но это, казалось, было единственным способом, который я мог придумать для этого. Общие имена и соответствующие коды видов были первоначально сохранены в файле excel, и я создал словарь из этого.
У меня просто нет опыта работы с кодированием вне классной комнаты и мало что нужно знать о памяти и производительности программ. Любая помощь очень ценится. Спасибо.
Вы можете скопировать и вставить StackTrace, что вы получаете, когда аварии питона в ваш вопрос, пожалуйста? – snakecharmerb
Прямо сейчас это дает мне SyntaxError: непоследовательное использование вкладок и пробелов в отступе. Как я могу найти stacktrace между прочим. Извинения за неопытность. Python работает очень медленно, когда я пытаюсь объявить класс. –
Трассировка начинается с: 'Traceback (последний последний вызов):' и заканчивается тем исключением, которое вы видите, - 'SyntaxError' в вашем случае. – snakecharmerb