要求:
1,将txt中的数据转化为json数据
2,查找某个词的路径,如 查找 '感知机' 返回路径为 ['机器学习', '神经网络', '多层网络', '感知机']
机器学习,线性模型,线性回归,最小二乘法 ,神经网络,神经元模型,激活函数 ,,多层网络,感知机 ,,,连接权 ,强化学习,有模型学习,策略评估 ,,,策略改进 ,,免模型学习,蒙特卡洛方法 ,,,时序差分学习 ,,模仿学习,直接模仿学习 ,,,逆强化学习 将上面的数据转化为下面的格式,一个逗号表示省略上一行的一个词,两个逗号表示省略上一行的两个词 [{ "机器学习": [{ "线性模型": [{ "线性回归": [{ "最小二乘法": [] }] }] }, { "神经网络": [{ "神经元模型": [{ "激活函数": [] }] }, { "多层网络": [{ "感知机": [] }, { "连接权": [] }] }] }, { "强化学习": [{ "有模型学习": [{ "策略评估": [] }, { "策略改进": [] }] }, { "免模型学习": [{ "蒙特卡洛方法": [] }, { "时序差分学习": [] }] }, { "模仿学习": [{ "直接模仿学习": [] }, { "逆强化学习": [] }] }] }] }]
import json keys = [] # key 来记录字典的层数,一级字典的key list1 = [] li_last = [] def func(key, li): if not li: li.append({key: []}) if li and key not in [key for i in li for key in i.keys()]: li.append({key: []}) def notes2json(file_path): with open(file_path, encoding='utf-8') as f: for line in f: li = line.strip().split(',') count = li.count('') keys[count:] = li[count:] for index in range(len(keys)): if index == 0: func(keys[index], list1) li_last = list1[-1][keys[index]] else: func(keys[index], li_last) li_last = li_last[-1][keys[index]] return json.dumps(list1, ensure_ascii=False) # 如果只返回的机器学习的就list1[0],如果要返回所有的内容就list1 json_str = notes2json('t3.txt') print(json_str) li = json.loads(json_str) # 这里必须是列表,所以如果notes2json返回的是字典时应当 [json.loads(json_str)] q = [] result = [] def li2q(li,key,x=None): for i in li: for k,v in i.items(): q.append({k:x}) if k == key: return q if v: li2q(v,key,k) def find(targt): first_targt = targt li2q(li,targt) while 1: for i in q: k = list(i.keys())[0] if k == targt: result.insert(0, k) targt = i[k] if not targt or not result: break return result if result else f'不存在关键字:{first_targt}' print(find('感知机'))