day9(Hash、字典)
一、Hash
简介:
Hash,一般被翻译成“散列”,也有直接音译"哈希"的,就是把任意长度的输入,通过哈希算法,变换成固定长度的输出,输出的结果就叫做哈希值,这是一种压缩映射,也就是说一般哈希值的空间要小于输入空间,不同的输入但是得出的哈希值可能是相同的,所以不可能从哈希值来确定输入值,简单来说哈希就是将任意长度压缩为固定长度的函数。
特征:
Hash的值计算过程中是依据输入值的一些特性计算的,这就要求Hash值必须固定,因此被Hash的值必须是不可变的,如字符串、数字、元祖。不可为列表
用途:
- 文件签名
- MD5加密
- 密码验证
二、字典
简介:
字典是一种key -value的数据类型,通过key的值来获取value
基本语法:
info = { #大括号
'a':1,#用冒号隔断key value
'b':2,
'c':3
}
print(info)
特性:
- key -value 结构
- key必须可哈希、且必须为不可变数据类型、必须唯一
- 可存任意多个值、可修改、可不唯一
- 无序
- 查找速度快
基本操作:
增加
info = { #大括号
'a':1,#用冒号隔断key 和 value
'b':2,
'c':3
}
info['] #可以增加列表
print(info)
# 结果 {'a': 1, 'b': 2, 'c': 3, 'd': ['4', '5']}
修改
info = {
'a':1,
'b':2,
'c':3
}
info['a'] = 11
print(info)
#结果{'a': 11, 'b': 2, 'c': 3}
查找,查找有两种方法分别是
in
info = {
'a':1,
'b':2,
'c':3
}
print("a" in info)
#输出
True
info = {
'a':1,
'b':2,
'c':3
}
print("x" in info)
#输出
False
info = {
'a':1,
'b':2,
'c':3
}
print (info['x']) #如果取得键字典里面没有就会报错
#报错
get
info = {
'a':1,
'b':2,
'c':3
}
print (info.get('a'))
#输出
1
info = {
'a':1,
'b':2,
'c':3
}
print (info.get('a')) #如果取得键字典里面没有也不会报错则会返回 None
#输出
None
两种方法都可以满足查找的要求,但是建议使用get因为get查找的值如果不存在不会报错!
多级字典嵌套,字典里可以套字典,一层一层这个意思
info = {
'a':{
'A':1,
'B':2
},
'b':2,
'c':3
}
print(info)
#输出
{'a': {'A': 1, 'B': 2}, 'b': 2, 'c': 3}
values #以列表返回一个字典所有的值
{'a': 1, 'b': 2, 'c': 3}
>>> info.values()
dict_values([1, 2, 3])
keys#以列表返回一个字典所有的键
>>> info.keys() dict_keys(['a', 'b', 'c'])
setdefault #和get 方法类似, 如果键不存在于字典中,将会添加键并将值设为默认值。
>>> info.setdefault('xiaoze','baliya')
'maliya'
>>> info
{'a': 1, 'b': 2, 'c': 3, 'xiaoze': 'maliya'}
update#把字典dict2的键/值对更新到dict里。
>>> info
{'a': 1, 'b': 2, 'c': 3, 'xiaoze': 'baliya'}
>>> info_2
{'A': 1, 'b': 2, 'c': [4, 5, 6]}
>>> info.update(info_2)
>>> info
{'a': 1, 'b': 2, 'c': [4, 5, 6], 'xiaoze': 'baliya', 'A': 1}
items#以列表返回可遍历的(键, 值) 元组数组。
>>> info.items()
dict_items([('a', 1), ('b', 2), ('c', [4, 5, 6]), ('xiaoze', 'baliya'), ('A', 1)])
fromkeys#用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值
>>> dict.fromkeys([1,2,3],'test')
{1: 'test', 2: 'test', 3: 'test'}
循环
#方法一
info = {
'a':1,
'b':2,
'c':3
}
for key in info:
print(key,info[key])
#输出
a 1
b 2
c 3
#方法二
for key,y in info.items():
print(key,y)
#输出
a 1
b 2
c 3
#使用第一种方法不是建议,第二种方法刚刚说过了是将字典转换为列表然后在循环打印,这样大大降低了效率!
day9(Hash、字典)的更多相关文章
- Redis学习系列四Hash(字典)
一.简介 Redis中的Hash字典相当于C#中的Hashtable,是一种无序字典,内存存储了很对的键值对,实现上和Hashtable一样,都是"数组+链表"二维结构,都是对关键 ...
- hash(2018年CSUST省赛选拔赛第一场B题+hash+字典树)
题目链接:http://csustacm.com:4803/problem/1006 题目: 思路:正如题目一样,本题是一个hash,比赛的时候用的字典树,但是不知道为什么一直RE(听学长说要动态开点 ...
- redis 五种数据结构详解(string,list,set,zset,hash)
redis 五种数据结构详解(string,list,set,zset,hash) Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存 ...
- [转]加盐hash保存密码的正确方式
0x00 背景 大多数的web开发者都会遇到设计用户账号系统的需求.账号系统最重要的一个方面就是如何保护用户的密码.一些大公司的用户数据库泄露事件也时有发生,所以我们必须采取一些措施来保护用户的密码, ...
- 数据结构图解(递归,二分,AVL,红黑树,伸展树,哈希表,字典树,B树,B+树)
递归反转 二分查找 AVL树 AVL简单的理解,如图所示,底部节点为1,不断往上到根节点,数字不断累加. 观察每个节点数字,随意选个节点A,会发现A节点的左子树节点或右子树节点末尾,数到A节点距离之差 ...
- 【Redis】redis 五种数据结构详解(string,list,set,zset,hash)
redis 五种数据结构详解(string,list,set,zset,hash) Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存 ...
- python 基础之数据类型
一.python中的数据类型之列表 1.列表 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 二.列表常用操作 >切片>追加>插入>修改& ...
- 微冷的雨ASP.NET MVC之葵花宝典(MVC)
微冷的雨ASP.NET MVC之葵花宝典 By:微冷的雨 第一章 ASP.NET MVC的请求和处理机制. 在MVC中: 01.所有的请求都要归结到控制器(Controller)上. 02.约定优于配 ...
- Python基础四
1. 集合 主要作用: 去重 关系测试, 交集\差集\并集\反向(对称)差集 2. 元组 只读列表,只有count, index 2 个方法 作用:如果一些数据不想被人修改, 可以存成元组,比如身 ...
随机推荐
- BZOJ 1367: [Baltic2004]sequence [可并堆 中位数]
1367: [Baltic2004]sequence Time Limit: 20 Sec Memory Limit: 64 MBSubmit: 1111 Solved: 439[Submit][ ...
- BZOJ 1898: [Zjoi2005]Swamp 沼泽鳄鱼 [矩阵乘法]
1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1082 Solved: 602[Submit][S ...
- 使用Dockerfile构建镜像
Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile快速创建自定义的镜像.它类似shell脚本,由一行行命令组成,支持以#开头的注释行.一般而言,Dockerfile分为四部 ...
- 痞子衡随笔:常用的数据传输差错检测技术(1)- 奇偶校验(Parity Check)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式数据传输里的差错检测技术-奇偶校验. 在嵌入式应用里,除了最核心的数据处理外,我们还会经常和数据传输打交道.数据传输需要硬件传输接口 ...
- docker-compose快速搭建lnmp+redis服务器环境
因为我用的是MacOS 安装docker sudo yum update sudo tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrep ...
- 在Swift项目中使用OC,在OC项目中使用Swift
几天前,我开始新的App的开发了.终于有机会把swift用在实战中了,也学到了之前纯学语法时没有机会获得的知识. 这篇博文中,我就如何使用swift.OC混编做一个介绍. OC中使用Swift 首先, ...
- VS2015 (C/C++) 生成的程序,不能在server2008上运行
项目本来是为Linux下运行做的,但是客户环境需要在windows下运行,幸好用的一些库是跨平台的. 于是用vs2015编译. 然后就发现在2008上却运行时库,装了2015的运行时库后, 在运行,就 ...
- Android 文件下载三种基本方式
一.自己封装URLConnection 连接请求类 public void downloadFile1() { try{ //下载路径,如果路径无效了,可换成你的下载路径 String url = & ...
- 01. SELECT显示和PRINT打印超长的字符
从SQL Server 2005开始,引入了varchar(max) / nvarchar(max) 数据类型,表中可不使用LOB数据类型,从而突破单列8000 / 4000字符的限制,动态SQL也可 ...
- Maven中模块的聚合以及对jar包的继承
我需要将之前的A B C三个模块聚合到一个一个工程中ABC项目中 pom.xml文件中应该这样配置 1.修改packaging里面的配置 <!-- 用于聚合这个项目的时候应该将packaging ...