Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 5, 2016 13:03:15

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 252
Репутация: +  4  -
Профиль   Отправить e-mail  

Структура данных

Подскажите, пожалуйста, как лучше организовать данные в моей программе (оболочка для онлайн-словаря). Скачивается статья, а элементы статьи выстраиваются в виде таблицы. Идея такая: выстроить цепочку вида

 источник.словарь.статья.число_столбцов.вид.ячейки.номер_строки.номер_столбца.термин.аттрибуты
Чтобы не анализировать уже готовые данные, предполагаю возвращать звено, если оно уже имеется или отстраивать цепочку с нового звена, если оно еще не создано. Этот момент ясен:
 def check(self):
  if not self._data:
    self.create()
return self._data
Хочется, чтобы звеньям, как экземплярам класса, можно было бы присвоить произвольные аттрибуты, например:
 источник.тип = 'онлайн'
Что тут лучше использовать? Классы, словари, БД? Как проще отслеживать звенья, идущие до текущего (например, как лучше в класс, обрабатывающий статьи, передать ветку источник.словарь)?

Офлайн

#2 Сен. 5, 2016 23:49:59

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 252
Репутация: +  4  -
Профиль   Отправить e-mail  

Структура данных

Решил проблему вот так (возможно, нецелесообразно, критика приветствуется):

 #!/usr/bin/python3
data = {}
selves = {}
	
class Sources:
		
	def __init__(self,key='Multitran'):
		self.key = key
		if not self.key in data:
			print('Creating key "%s"...' % self.key)
			data[self.key] = {}
		selves['Sources'] = self
	
	def dics(self,key='Main'):
		return Dics(key=key)
			
class Dics:
		
	def __init__(self,key='Main'):
		self.key = key
		if not self.key in data[selves['Sources'].key]:
			print('Creating key "[%s][%s]"...' % (selves['Sources'].key,self.key))
			data[selves['Sources'].key][self.key] = {}
		selves['Dics'] = self
		
	def searches(self,key='welcome'):
		return Searches(key=key)
class Searches:
	
	def __init__(self,key='welcome'):
		self.key = key
		if not self.key in data[selves['Sources'].key][selves['Dics'].key]:
			print('Creating key "[%s][%s][%s]"...' % (selves['Sources'].key,selves['Dics'].key,self.key))
			data[selves['Sources'].key][selves['Dics'].key][self.key] = {}
		selves['Searches'] = self
		
	def urls(self,key='multitran.ru'):
		return Urls(key=key)
		
		
class Urls:
	
	def __init__(self,key='multitran.ru'):
		self.key = key
		if not self.key in data[selves['Sources'].key][selves['Dics'].key][selves['Searches'].key]:
			print('Creating key "[%s][%s][%s][%s]"...' % (selves['Sources'].key,selves['Dics'].key,selves['Searches'].key,self.key))
			data[selves['Sources'].key][selves['Dics'].key][selves['Searches'].key][self.key] = {}
		selves['Urls'] = self
		self.attr = 'Just a check (Urls)'
	
	
# todo: fix standalone instances for Sources
Sources('Multitran').dics().searches('Тест').urls()
Sources('Lingvo').dics('Any').searches('ant').urls('google.ru')
Sources('Lingvo').dics('Any').searches('good').urls('rambler.ru')
Sources('Multitran').dics().searches('good').urls()
Sources('Lingvo').dics('Any').searches('good').urls('no.ru')
for key, value in data.items():
	print(key)
	print(value)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version