一、Hash

简介:

  Hash,一般被翻译成“散列”,也有直接音译"哈希"的,就是把任意长度的输入,通过哈希算法,变换成固定长度的输出,输出的结果就叫做哈希值,这是一种压缩映射,也就是说一般哈希值的空间要小于输入空间,不同的输入但是得出的哈希值可能是相同的,所以不可能从哈希值来确定输入值,简单来说哈希就是将任意长度压缩为固定长度的函数。

特征:

  Hash的值计算过程中是依据输入值的一些特性计算的,这就要求Hash值必须固定,因此被Hash的值必须是不可变的,如字符串、数字、元祖。不可为列表

用途:

  1. 文件签名
  2. MD5加密
  3. 密码验证

二、字典

简介:

  字典是一种key -value的数据类型,通过key的值来获取value

基本语法:

  

info = { #大括号
    'a':1,#用冒号隔断key  value
    'b':2,
    'c':3
}
print(info)

特性:

  1. key -value 结构
  2. key必须可哈希、且必须为不可变数据类型、必须唯一
  3. 可存任意多个值、可修改、可不唯一
  4. 无序
  5. 查找速度快

基本操作:

增加

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、字典)的更多相关文章

  1. Redis学习系列四Hash(字典)

    一.简介 Redis中的Hash字典相当于C#中的Hashtable,是一种无序字典,内存存储了很对的键值对,实现上和Hashtable一样,都是"数组+链表"二维结构,都是对关键 ...

  2. hash(2018年CSUST省赛选拔赛第一场B题+hash+字典树)

    题目链接:http://csustacm.com:4803/problem/1006 题目: 思路:正如题目一样,本题是一个hash,比赛的时候用的字典树,但是不知道为什么一直RE(听学长说要动态开点 ...

  3. redis 五种数据结构详解(string,list,set,zset,hash)

    redis 五种数据结构详解(string,list,set,zset,hash) Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存 ...

  4. [转]加盐hash保存密码的正确方式

    0x00 背景 大多数的web开发者都会遇到设计用户账号系统的需求.账号系统最重要的一个方面就是如何保护用户的密码.一些大公司的用户数据库泄露事件也时有发生,所以我们必须采取一些措施来保护用户的密码, ...

  5. 数据结构图解(递归,二分,AVL,红黑树,伸展树,哈希表,字典树,B树,B+树)

    递归反转 二分查找 AVL树 AVL简单的理解,如图所示,底部节点为1,不断往上到根节点,数字不断累加. 观察每个节点数字,随意选个节点A,会发现A节点的左子树节点或右子树节点末尾,数到A节点距离之差 ...

  6. 【Redis】redis 五种数据结构详解(string,list,set,zset,hash)

    redis 五种数据结构详解(string,list,set,zset,hash) Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存 ...

  7. python 基础之数据类型

    一.python中的数据类型之列表 1.列表 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 二.列表常用操作 >切片>追加>插入>修改& ...

  8. 微冷的雨ASP.NET MVC之葵花宝典(MVC)

    微冷的雨ASP.NET MVC之葵花宝典 By:微冷的雨 第一章 ASP.NET MVC的请求和处理机制. 在MVC中: 01.所有的请求都要归结到控制器(Controller)上. 02.约定优于配 ...

  9. Python基础四

    1. 集合 主要作用: 去重 关系测试, 交集\差集\并集\反向(对称)差集   2. 元组 只读列表,只有count, index 2 个方法 作用:如果一些数据不想被人修改, 可以存成元组,比如身 ...

随机推荐

  1. 为Android添加JNI支持

    起因 今天在进行Android原生开发时,需要通过JNI调用C++代码实现一些处理.以前没有做过类似的东西,在网上找了很久才解决问题,特记录下来以便以后翻阅. Eclipse无cygwin编译so的方 ...

  2. 使用scrapy爬取豆瓣上面《战狼2》影评

    这几天一直在学习scrapy框架,刚好学到了CrawlSpider和Rule的搭配使用,就想着要搞点事情练练手!!! 信息提取 算了,由于爬虫运行了好几次,太过分了,被封IP了,就不具体分析了,附上& ...

  3. main函数的实现解析

    main函数的传参的实现,其实也是一个解析字符串的过程:将每个word后一个空格改为“/0”,将单词提取出来. 就是这么简单. 废话不多说,直接上代码: #include<stdio.h> ...

  4. 在Windows下为PHP5.5安装redis扩展

    使用phpinfo()函数查看PHP的版本信息,这会决定扩展文件版本   根据PHP版本号,编译器版本号和CPU架构, 选择php_redis-2.2.5-5.5-ts-vc11-x86.zip和ph ...

  5. 打开word时出现the setup controller has encountered a problem during install解决办法

    问题电脑为win7,office是默认安装 删除下面文件夹即可解决该问题 C:\Program Files\Common Files\Microsoft Shared\OFFICE12\Office ...

  6. HTML5VEDIO标签阿里云-微信浏览器兼容性问题

    在网页展示媒体对象,离不开HTML5的 audio和video对象.但这两个目前来看兼容性方面还得关注一下. 目前在做一个阿里云下载video 并在微信端播放mp4格式的视频的时候,碰到了一些兼容性问 ...

  7. 基于JDK1.8的ConcurrentHashMap分析

    之前看过ConcurrentHashMap的分析,感觉也了解的七七八八了.但昨晚接到了面试,让我把所知道的ConcurrentHashMap全部说出来. 然后我结结巴巴,然后应该毫无意外的话就G了,今 ...

  8. 在项目中遇到关于 CSS Overflow Hidden在iPhone & Safari不起作用

    调试了半天 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <m ...

  9. 《设计模式之禅》--设计模式大PK

    创建类模式包括工厂方法模式.建造者模式.抽象工厂模式.单例模式和原型模式. 其中单例模式要保持在内存中只有一个对象,原型模式是要求通过复制的方式产生一个新的对象. [工厂方法(抽象工厂) VS 建造者 ...

  10. 地牢逃脱 (BFS)

    题意:给定一个 n 行 m 列的地牢,其中 '.' 表示可以通行的位置,'X' 表示不可通行的障碍,牛牛从 (x0 , y0 ) 位置出发,遍历这个地牢,和一般的游戏所不同的是,他每一步只能按照一些指 ...