2025-09-10:仓库迁移

This commit is contained in:
2025-09-10 16:12:45 +08:00
parent e0e49b0ac9
commit 3130e336a1
146 changed files with 4066 additions and 0 deletions

View File

@@ -0,0 +1,57 @@
# 假如又两个字典:
a = {"x":1, "z":3}
b = {"y":2, "z":4}
# 怎么将这两个字典映射到一个新字典里呢?愚蠢的办法是使用字典合并
# 这个方法会把右边的b刷写到a里
c = a|b
print(c)
# 但是,你会发现,如果原字典被改了,那c不会有变化:
a["x"] = 2
print(c)
# 这个时候使用映射方案的chainmap就会很好用
from collections import ChainMap
c = ChainMap(a,b)
print(",".join(str(x) for x in [c['x'], c['y'], c['z']]))
print(len(c))
# 如果此时更改原字典的值:
a["x"] = 1
# 输出也跟着更改了
print(",".join(str(x) for x in [c['x'], c['y'], c['z']]))
print(len(c))
# 注,chainmap中如果有重复的键,则会采用左值,比如上面的例子使用a["z"]作为重复键z的取值;
# 如果修改字典值,也会作用在左值上
del c["z"]
print(",".join(str(x) for x in [c['x'], c['y'], c['z']]))
print(a, b)
# 如果尝试删除a里已经没有但b里有的键,那么会报错
try:
del c["z"]
except:
print("在a里没找到键")
# 这东西的底层其实是一个链表,演示如下:
dic = ChainMap()
dic["x"] = 1
dic = dic.new_child()
print(dic)
dic["x"] = 2
dic = dic.new_child()
print(dic)
dic["x"] = 3
print(dic)
# 从这里我们开始回溯历史
dic = dic.parents
print(dic)
dic = dic.parents
print(dic)
dic = dic.parents
print(dic)
# 可以看到我们用new_child()函数创建了一个新节点用parents属性来回溯