Найти - Пользователи
Полная версия: Рекурсивное создание ключей словаря
Начало » Python для новичков » Рекурсивное создание ключей словаря
1
vanvanov
Добрый день. У меня вот такой вопрос.
Программа создает словарь данных по анализу текста со множеством вложенных ключей, уровней несколько. Допустим, структура такая:
# Результат анализа текста
dic = {
        # Уровень анализа: по словам
        'words':{
                # Слова из текста с пунктуацией
                'p':{
                        
                    }
                # Слова из текста без пунктуации
                'np':{
                        
                     }
                # Число слов
                'num':0
                }
        # Уровень анализа: по предложениям
        'sents':{
                }
      }
На самом деле, структура намного сложнее и анализ занимает весьма продолжительное время. Для обработки каждого ключа есть своя функция. Мне хочется не проводить анализ целиком, а задействовать только те функции, которые необходимы для обработки текущих ключей. Другими словами, хочу сделать следующее: если ключ есть, то возвращать его, а если нет - создавать. При необходимости создавать также ключи предыдущих уровней.

Недавно читал про реактивное программирование, возможно, это оно и есть. Как такое лучше реализовать? Вероятно, подойдут классы вида:
db = {}
db['text'] = 'Карл у Клары украл кораллы, а Клара у Карла украла кларнет.'
class Analyse:
	def words(self):
		if not 'words' in db:
			db['words'] = {}
		db['words']['list'] = db['text'].split(' ')
		db['words']['num'] = len(db['words']['list'])
			
	def nf(self):
		if not 'words' in db:
			self.words()
		if not 'nf' in db['words']:
			db['words']['nf'] = {}
			db['words']['nf']['list'] = []
			for i in range(db['words']['num']):
				db['words']['nf']['list'].append(db['words']['list'][i].replace('.','').replace('.',','))
			db['words']['nf']['num'] = len(db['words']['nf']['list'])
		return db['words']['nf']
		
analyse = Analyse()
print(analyse.nf()['list'][3])
Можно ли:
1) Упростить проверку вложенных ключей?
2) Использовать конструкцию вида analyse.words.nf.3 для доступа к данным / создания данных?
Как вообще такие вещи лучше делать, возможно, без словаря?
FishHook
vanvanov
если ключ есть, то возвращать его, а если нет - создавать.
Вероятно, вам поможет доступный из стандартной библиотеки питона defaultdict.
Пользоваться как-то так
d = defaultdict(list)
d["sdsd"].append("dsd")
    
f = defaultdict(dict)
f["sdsd"]["ssss"] = "ssss"
    
c = defaultdict(lambda x: .......)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB