python容器---dict

本文介绍了Python中的字典数据结构,包括其特性(如键的唯一性、哈希原理),并探讨了哈希算法如MD5和SHA-1在密码加密、日志完整性和系统文件监控中的应用。此外,还展示了如何处理字典的取值、新增、修改和遍历,以及字典操作和合并的方法。
摘要由CSDN通过智能技术生成
# 字典
# 键值映射的数据结构  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)
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值