# 字典 # 键值映射的数据结构 key--value # 无序 # 可变数据类型 # 字典的key # 天生去重 # key 必须是可hash对象 -- 不可变数据类型 # value可以是任何类型 # key存进去会进行hash算法 把它加密成相同长度的字符串 查询的时候再对加密的进行解析 将hash字符串与value对应 # 相同的数hash的结果是相同的 # 不同的数据hash出来的结果有可能相同(概率较小) # hash出来的结果并不能还原出原来的字符串 # 常见的hash算法:md5,sha-1,sha-2,sha-128,if sha - 256..: # hash算法的应用场景: # django =>密码加密 => sha-256 => 密码加密(找回密码-> 设置新密码) # 日志系统(备份) => 对数据进行完整性校验 => md5 => md5 filename => 加密成相同长度的字符串 # 安全 => 对重要的系统文件进行监控 => /etc/password 记录md5 # d1 = {"name":"sc", "age":18} # type(d1) # <class 'dict'> # d2 = {"A":1, "b":2, "A":3, (1,2):4} # d2 # {'A': 3, 'b': 2, (1, 2): 4} # d2 = {"A":1, "b":2, "A":3, [1,2]:4} # Traceback (most recent call last): # File "<input>", line 1, in <module> # TypeError: unhashable type: 'list' # # 字典的取值 d1 = {"a":1, "b":2, "c":3} # print( d1['a'] ) # # print( d1["xx"] ) #如果没有这个key就会抛出异常 # # 建议使用get方法取值,如果找不到key,不会报错,会返回默认值 # # 也可以自己设置默认值 # print(d1.get("c")) # print(d1.get("xx")) #如果取不到xx就返回默认值(None) # print(d1.get("xx",0)) #如果d1能渠道xx的值,就返回xx对应的value。取不到就返回0 # # # 新增和修改 # d1["c"] = 300 #key存在,就是修改 # d1["yy"] = 600 #key不存在,就是新增 # print(d1) # # # 字典的遍历 # for i in d1: # print(i) # for k,v in d1.items(): # print(f"{k} --> {v}") # # # 成员关系的判断 in 默认情况值判断key # print("a" in d1) # print(1 in d1) # print(d1.values()) # print(1 in d1.values() ) # 不限次数输入,选择3退出 # 1、输入1进入注册 # 如果有这个用户了,就不用再注册 # name_dict = {"root":{"age":18,"passwd":"123456"} # "admin":{"age":19,"passwd":"admin123"} # 输入用户名、年龄、密码 # 2、输入2 进行查询 # 输入要查询的姓名,展示这个人的详细信息 # 3、退出 # 后续考虑:写入文件 # json库转换成字符串写入文件 # import json # import os # # file_path = "user.txt" # name_dict = {} # # name_dict = {'root':{'age':18},'passwd':'123456','admin':{'age':18,'passwd':'admin123'}} # if os.path.exists(file_path): # fp = open(file_path) # name_str = fp.read() # name_dict = json.loads(name_str) # while 1: # num = int(input("请按对应序号进行操作:\n1、注册\n2、查询\n3、退出")) # # 注册 # if num == 1: # username = input("please input your username:") # # 用户已存在则输出提示信息 # if username in name_dict: # print("你已经注册过啦!\n") # # 不存在则注册用户 # else: # age = int(input("please input your age:")) # passwd = input("please input your passwd:") # message = {"age":age, "passwd":passwd} # name_dict[username] = message # print("注册成功!\n") # #写入文件 # fp = open(file_path, "w") # result_str = json.dumps(name_dict) # fp.write(result_str) #只能写入字符串,不能直接写入字典 # fp.flush() #强制把写入内容从内存刷入到磁盘 # # 查询 # if num == 2: # username = input("please input the username you want to ask:") # # 若该用户存在则输出该用户的全部信息 # if username in name_dict: # print(f"该用户的年龄为:{name_dict[username]['age']}\n") # print(f"该用户的密码为:{name_dict[username]['passwd']}\n") # else: # print("该用户不存在!\n") # # 退出 # if num == 3: # break # json --> 轻量级的数据交换格式 # ”zhangyaping 123456“ --》name_info -->name_ifo.split()[0] # name_info = "zhangyaping 123456" # print(name_info.split()[0]) # zhangyaping|123456 -->split("|") # 切忌特立独行 标准化,流程化 # str1 = '{"root":123456, "admin":"admin123"}' # obj --> str # json.dumps() # str --> obj # json.loads() # 两个字典的合并 # d1 = {"a":1, "b":2} # d2 = {"c":3, "d":3} # d1.update(d2) #把d2的内容合并到d1里面 # print(d1) # 把两个字典合并成一个新的字典 # d1 = {"a":1,} # d2 = {"b":2,} # d3 = dict(d1, **d2) # print(d3) # 删除 # d1 = {"a":1, "b":2, "c":3} # # popitem默认从后往前删 # result = d1.popitem() #使用一个变量去接收获取的是打包的一个元组 # print(result,d1) # # k, v = d1.popitem() #使用两个变量去接收 分别获取key和value值 # # print(k,v) # x,y,z = [1,2,3] # a,b,c = (4,5,6) # print(x,y,z,a,b,c) # result2 = d1.pop("a") #pop可以指定删除谁,把指定的value值返回 # print(result2, d1)
python容器---dict
于 2024-04-24 23:07:47 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)