练习字典的循环遍历:实现多层级节点存取

Posted 苦逼工程师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了练习字典的循环遍历:实现多层级节点存取相关的知识,希望对你有一定的参考价值。

关键点:字典、列表、集合等可变类型,若将一个可变类型赋给变量A和B,通过B改变了该可变类型内部的元素,指向该可变类型内存地址的变量A的值一样会跟着改变(因A、B同时指向了一个内存地址)

>>> a={"AB":"ab","CD":"cd"}
>>> b=a
>>> id(a)
33380536
>>> id(b)
33380536
>>>
>>> b["AB"]="efg"
>>> b
{AB: efg, CD: cd}
>>> a
{AB: efg, CD: cd}
>>> id(a)
33380536
>>> id(b)
33380536
>>>

 

题目:利用字典实现多层级节点的增加、查询功能,并且通过pickle序列化的方式保存为文件。

 1 import pickle
 2 import os
 3 import time
 4 
 5 if os.path.isfile(db.pk1):
 6     print("载入数据库,请稍候…………")
 7     time.sleep(2)
 8     f = open("db.pk1", "rb")
 9     db = pickle.load(f)
10     f.close()
11     print("数据库加载完毕。")
12     path = []
13     while True:
14         tmp = db
15         if path:
16             for item in path:
17                 if item in list(tmp.keys()):
18                     tmp = tmp[item]
19                 else:
20                     print("无此节点,请重新输入")
21         print("当前节点下的子节点为:", list(tmp.keys()))
22 
23         choice = input("请选择:1、查看节点\t2、添加节点\t3、返回上级\t4、退出\n>>>>>")
24         if choice == "1":
25             n = input("请输入节点名称>>>")
26             path.append(n)
27 
28         elif choice == "2":
29             name = input("请输入节点名称:")
30             tmp[name] = {}
31         elif choice == "3":
32             if path:
33                 path.pop()
34             else:
35                 print("已经是根节点,无法返回。")
36         elif choice == "4":
37             print("保存数据库,请稍等……")
38             time.sleep(2)
39             f = open("db.pk1", "wb")
40             pickle.dump(db, f, True)
41             print("保存成功,程序退出。")
42             break
43         else:
44             print("输入错误请重新输入")
45 elif not os.path.isfile(db.pk1):
46     choice1 = input("数据库不存在,是否初始化数据库:Y\\N\n>>>")
47     if choice1.lower() == "y":
48         db = {}
49         time.sleep(2)
50         f = open("db.pk1", "wb")
51         pickle.dump(db, f, True)
52         f.close()
53         print("初始化成功。")
54         
55     elif choice1.lower() == "n":
56         print("无法初始化数据库,程序退出。")

 

以上是关于练习字典的循环遍历:实现多层级节点存取的主要内容,如果未能解决你的问题,请参考以下文章

Python初学者第九天 字符串列表字典练习

python3循环遍历嵌套字典替换指定值

《Python从入门到实践》--第六章 操作字典 课后练习2

微信小程序多层嵌套循环,二级数组遍历

遍历通用节点类,列出所有节点导致无限循环

对比多层字典是否相同函数