python 基础 1.5 python数据类型(四)--字典
一.python 数据类型--字典
1.用字符串存储信息,如:存储“姓名,身高,性别”:
In [1]: info='Tom 170 M' //字符串存储信息
In [3]: info[0:3] //字符串提取人名
Out[3]: 'Tom'
2.用列表存储信息
In [10]: list1 = ['name','age']
In [11]: list2 = ['tom','20']
In [12]: list3 = ['mike','30']
In [13]: zip(list1,list2) //zip函数可以把两个列表合在一起,从上一个列表取个值,从下个列表取个值
Out[13]: [('name', 'tom'), ('age', '20')]
In [14]: zip(list1,list3)
Out[14]: [('name', 'mike'), ('age', '30')]
3.字典用大括号{}表示。字符串是引号,列表是中括号[],元组是小括号(),字典是大括号{}。
3.1》字典是python中的唯一的映射类型(哈希表)
3.2》字典对象是可变的,但是字典的键必须用不可变对象,一个字典中可以使用不同类型的键值
3.3》字典的方法:
--keys()
-values()
-items()
3.4》字典中,keys和values是一对,values是可变的,但是键keys是不可变的,在字典中keys是唯一的不同冲突。
4.创建一个字典
In [15]: dic = {} //创建一个空字典
In [16]: type(dic) //查看字典dic的类型
Out[16]: dict //字典dic类型为字典
In [17]: dic = {'a':1,1:123}
2对keys:values
In [18]: dic
Out[18]: {1: 123, 'a': 1} //字典显示的时候是无序的,不是先创建谁,就先显示谁
说明:字典中keys是不可变的,所以keys不能是列表,字符串,可以是元组。
In [19]: dic = {'a':1,1:123,('a','b'):'hello'} //用元组作为keys是可以的,因为元组是不可变的。
In [20]: dic
Out[20]: {1: 123, 'a': 1, ('a', 'b'): 'hello'}
In [21]: len(dic) //查看字典的长度
Out[21]: 3 //有三个元素
In [8]: dic //dic 字典
Out[8]: {'a': 456, 'b': 678}
In [9]: dic = {'a':456,'b':678,[5]:6} //用列表定义字典中的key值时报错,因为key是不可变的,而
列表是可变的。
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-9-150200d77d1e> in <module>()
----> 1 dic = {'a':456,'b':678,[5]:6}
TypeError: unhashable type: 'list'
5.字典里的方法
In [22]: dic.
dic.clear dic.has_key dic.itervalues dic.setdefault
dic.copy dic.items dic.keys dic.update
dic.fromkeys dic.iteritems dic.pop dic.values
dic.get dic.iterkeys dic.popitem
5.1》In [22]: dic.keys() //查看字典里的键值,可以显示出dic字典里对应的键值,已列表的形式显示出来
Out[22]: ['a', 1, ('a', 'b')]
In [23]: dic.values() //查看字典里的values值,可以显示出dic字典里对应的values值,已列表的形式显示出来
Out[23]: [1, 123, 'hello']
5.2》In [24]: help(dic.get) //查看dic.get的方法
Help on built-in function get:
get(...)
D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.
说明:当k在字典里的时候返回的是K值,当K不在字典里的时候,返回的是values值
In [25]: dic //字典里的元素
Out[25]: {1: 123, 'a': 1, ('a', 'b'): 'hello'}
In [22]: dic.keys() //查看字典里的key值
Out[22]: ['a', 1, ('a', 'b')]
In [23]: dic.values() //查看字典里的values值
Out[23]: [1, 123, 'hello']
In [27]: dic.get('a') //获取键值为‘a’的values值
Out[27]: 1 //values值为1
5.3》通过K值访问字典
In [28]: dic //字典元素
Out[28]: {1: 123, 'a': 1, ('a', 'b'): 'hello'}
In [29]: dic[1] //可以通过keys值访问想对应的values值
Out[29]: 123
In [30]: dic['a']
Out[30]: 1
In [32]: dic[('a','b')]
Out[32]: 'hello'
In [26]: dic['a'] //两种方法都可以通过keys值a,获取到a相对应的values值
Out[26]: 1
In [27]: dic.get('a')
Out[27]: 1
5.4>通过K值可以修改values值
In [33]: dic['a'] //起初字典里的a值对应的values值为1
Out[33]: 1
In [34]: dic['a'] = 2 //修改K值‘a’为2
In [35]: dic //查看变更后的values值,因为key值不可变的
Out[35]: {1: 123, 'a': 2, ('a', 'b'): 'hello'}
In [29]: dic //字典dic
Out[29]: {1: 123, 'a': 666, ('a', 'b'): 'hello'}
In [30]: dic.get('cc') //如果当字典中的keys值不存在时,返回的是空,没有输出
In [31]: dic.get('cc','python') //也可以把字典中不存在的keys值给一个values值=‘python’
Out[31]: 'python'
In [33]: dic //dic字典
Out[33]: {1: 123, 'a': 666, ('a', 'b'): 'hello'}
In [34]: 'b' in dic //判断一个key在不在字典里,返回false说明不在字典里
Out[34]: False
In [35]: 'a' in dic //返回true,说明a在字典里
Out[35]: True
In [36]: dic.has_key('a') //也可以用这种方法判断 a键值在不在字典里,返回true,说明在
Out[36]: True
In [37]: dic.has_key('b')
Out[37]: False
5.5》dic.items() //字典里items方法,他是把字典返回成列表形式
In [38]: dic //字典dic
Out[38]: {1: 123, 'a': 666, ('a', 'b'): 'hello'}
In [39]: dic.items() //dic.items 方法把字典返回成列表形式,并且他把字典里的元素分别以元组的形式保存。最外层是大的列表
Out[39]: [('a', 666), (1, 123), (('a', 'b'), 'hello')]
5.6》dic.copy 的方法
In [44]: dic.copy() //dic.copy 就是复制一个字典
Out[44]: {1: 123, 'a': 666, ('a', 'b'): 'hello'}
In [45]: dic1 = dic.copy() //复制一个字典到一个新的字典里
In [46]: dic1 //新字典dic1与dic字典一样
Out[46]: {1: 123, 'a': 666, ('a', 'b'): 'hello'}
5.7》dic.clear 方法。把整个字典清楚里边所有元素都没了
5.8》In [47]: help(dic.pop) //dic.pop方法
pop(...)
D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
If key is not found, d is returned if given, otherwise KeyError is raise
说明:指定移除K值,并返回移除K值的values值。如果K值不存在的时候,他会报K值的错
In [50]: dic //字典dic里的元素
Out[50]: {1: 123, 'a': 666, ('a', 'b'): 'hello'}
In [51]: dic.pop(1) //通过dic.pop方法,移除K值为1的元素
Out[51]: 123 //通过dic.pop方法移除K值的时候,会返回这个K值对应的values值
In [52]: dic //查看字典dic里的元素,发现K值为1的元素,没有了
Out[52]: {'a': 666, ('a', 'b'): 'hello'}
5.9》dic.update 方法。往字典里边更新,或者把两个字典更新成一个字典。
In [53]: dic //字典dic
Out[53]: {'a': 666, ('a', 'b'): 'hello'}
In [54]: dic1 = {'ty':00,('vb','yu'):88} //创建dic1字典
In [55]: dic.update(dic1) ///把dic1字典加到dic字典里
In [56]: dic //查看新的dic字典
Out[56]: {'a': 666, 'ty': 0, ('a', 'b'): 'hello', ('vb', 'yu'): 88}
In [57]: len(dic) ///dic字典总长度为4
Out[57]: 4
6.创建字典
dic = {} //创建空字典
dic = dict() //通过这种方法也可以创建字典。可以把列表变为字典
应用dict(),创建字典
In [66]: list1 = ['name','age'] //创建列表 list1
In [67]: list2 = ['tom',20] //创建列表2 list2
In [68]: list3 = ['mike',18] //创建3 list3
In [69]: zip(list1,list2) //zip函数是把两个列表合成一个大的列表
Out[69]: [('name', 'tom'), ('age', 20)]
In [71]: dict(zip(list1,list2)) //通过dict函数把列表转化成字典,并把之前元组里的name 变成了keys,tom变成了values。age也是keys,20是values。元组中前一个是keys,后一个是values
Out[71]: {'age': 20, 'name': 'tom'}
In [69]: zip(list1,list2)
Out[69]: [('name', 'tom'), ('age', 20)] //一个大的列表
In [75]: dict([('name', 'tom'), ('age', 20)]) //也可以通过dict函数直接把大列表转化成字典。dict格式:dict()
Out[75]: {'age': 20, 'name': 'tom'}
In [76]: dict(a=10,b=20) //dict也可以传参创建字典
Out[76]: {'a': 10, 'b': 20}
7.dic.fromkeys(),字典元素有相同的值,默认为None。
ddict = {}.fromkeys(('x','y'),100)
dic.fromkeys() 方法适用于字典里的keys值都一样。如下:
In [80]: dic.fromkeys('abc',100) //dic.fromkeys()方法,定义keys a b c 的values值都是100,字典存在dic已经存在的时候才能用fromkeys方法。dic字典元素不会被替换。
Out[80]: {'a': 100, 'b': 100, 'c': 100} //a,b,c values值都是100
In [81]: dic.fromkeys(range(20),100) //通过range函数(范围),创建20个values值都是100的字典,
Out[81]:
{0: 100,
1: 100,
2: 100,
3: 100,
4: 100,
5: 100,
6: 100,
7: 100,
8: 100,
9: 100,
10: 100,
11: 100,
12: 100,
13: 100,
14: 100,
15: 100,
16: 100,
17: 100,
18: 100,
19: 100}
In [84]: dic.fromkeys(range(5)) //如果不给valeus值的话,自动为None,是没有的意思
Out[84]: {0: None, 1: None, 2: None, 3: None, 4: None}
8.总结,创建字典字典
1》In [87]: dict() //也可以通过dict创建空字典
Out[87]: {}
2》In [88]: dict(x=10,y=10) //可以进行传参
Out[88]: {'x': 10, 'y': 10}
3》In [89]: dict([('a',10),('b',20)]) //dict(),括号里边还可以是可迭代的对象。
Out[89]: {'a': 10, 'b': 20}
4》In [90]: dic.fromkeys('abc',100)
Out[90]: {'a': 100, 'b': 100, 'c': 100}
9.总结,访问字典
可以通过keys值进行访问
1》In [91]: dic
Out[91]: {'a': 666, 'ty': 0, ('a', 'b'): 'hello', ('vb', 'yu'): 88}
In [92]: dic['a']
Out[92]: 666
2》通过dic.items 方法进行访问
In [91]: dic
Out[91]: {'a': 666, 'ty': 0, ('a', 'b'): 'hello', ('vb', 'yu'): 88}
In [93]: dic.items() //dic.items 把字典里边的keys和values 变成了元组里边的两个元素存在了列表里
Out[93]: [('a', 666), (('a', 'b'), 'hello'), (('vb', 'yu'), 88), ('ty', 0)]
3》通过for循环的方式访问字典
In [98]: dic
Out[98]: {'a': 666, 'ty': 0, ('a', 'b'): 'hello', ('vb', 'yu'): 88}
In [99]: for k in dic: //通过键值访问dic字典
....: print k //打印k值
....:
a
('a', 'b')
('vb', 'yu')
ty
4》通过for循环访问字典里的keys和values值
In [100]: for k in dic:
.....: print k,dic[k] //打印k值及字典里k值对应的values值,逗号表示keys和values值显示在一行
.....:
a 666
('a', 'b') hello
('vb', 'yu') 88
ty 0
In [101]: for k in dic:
.....: print "%s,%s" % (k,dic[k]) // %s 是让元组里的元素“k,dic[k]” 替换的。
.....:
a,666
('a', 'b'),hello
('vb', 'yu'),88
ty,0
In [102]: for k, v in dic.items(): print k,v
a 666
('a', 'b') hello
('vb', 'yu') 88
ty 0
10.可迭代与递归的意思
迭代:指重复执行一个命令,用在python的list里,是指重复调用list对象。将调用list对象返回的数据作为参数传递给一个函数,并有返回的结果,组成一个新的list。
递归:指一个函数执行过程中调用了自己,是对一种计算方法的描述。对于python的list的调用显然用递归这个词汇不合适。
从字面上理解“迭代”和“递归”也是不同的概念。“迭代”是重复某一过程,“递归”是调用自身。即“迭代”是循环操作,“递归”是且套操作。
python 基础 1.5 python数据类型(四)--字典的更多相关文章
- Python基础知识总结笔记(四)函数
Python基础知识总结笔记(四)函数python中的函数函数中的参数变量作用域偏函数PFA递归函数高阶函数BIFs中的高阶函数匿名函数lambda闭包Closure装饰器Decorator函数式编程 ...
- python基础系列教程——Python中的编码问题,中文乱码问题
python基础系列教程——Python中的编码问题,中文乱码问题 如果不声明编码,则中文会报错,即使是注释也会报错. # -*- coding: UTF-8 -*- 或者 #coding=utf-8 ...
- python基础系列教程——Python的安装与测试:python的IDE工具PyDev和pycharm,anaconda
---恢复内容开始--- python基础系列教程——Python的安装与测试:python的IDE工具PyDev和pycharm,anaconda 从头开启python的开发环境搭建.安装比较简单, ...
- python基础系列教程——Python库的安装与卸载
python基础系列教程——Python库的安装与卸载 2.1 Python库的安装 window下python2.python3安装包的方法 2.1.1在线安装 安装好python.设置好环境变量后 ...
- python基础之五大标准数据类型
学习一门语言,往往都是从Hello World开始. 但是笔者认为,在一个黑框框中输出一个"你好,世界"并没有什么了不起,要看透事物的本质,熟悉一门语言,就要了解其底层,就是我们常 ...
- Python基础(二) —— 字符串、列表、字典等常用操作
一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. 二.三元运算 result = 值1 if 条件 else 值2 如果条件为真:result = 值1如果条件为 ...
- python基础1之python介绍、安装、变量和字符编码、数据类型、输入输出、数据运算、循环
开启python之路 内容概要: 一.python介绍 二.安装 三.第一个python程序 四.变量和字符编码 五.用户输入 六.数据类型 七.一切皆对象 八.数据运算 九.if else 流程判断 ...
- 第二章:Python基础の快速认识基本数据类型和操作实战
本课主题 字符串和操作实战 二进制操作实战 List 列表和操作实战 Tuple 元組和操作实战 Dict 字典和操作实战 作業需求 引言 这遍文章简单介绍了 Python 字符串和集合的方法和应用, ...
- python基础(2)---数据类型
1.python版本间的差异: 2.x与3.x版本对比 version 2.x 3.x print print " "或者print()打印都可以正常输出 只能print()这种形 ...
- Python 基础之四初识Python数据类型
数字 Int,整型 Float,浮点型 Long,长整型 布尔 字符串 列表 元组 字典 1.数字 INT(整型) 在32位系统上,整数的位数为32位,取值范围为-2**31~2**31-1,即-21 ...
随机推荐
- Codeforces 785D Anton and School - 2(推公式+乘法原理+组合数学)
题目链接 Anton and School - 2 对于序列中的任意一个单括号对(), 左括号左边(不含本身)有a个左括号,右括号右边(不含本身有)b个右括号. 那么答案就为 但是这样枚举左右的()的 ...
- POJ 1703 Find them, Catch them 并查集的应用
题意:城市中有两个帮派,输入中有情报和询问.情报会告知哪两个人是对立帮派中的人.询问会问具体某两个人的关系. 思路:并查集的应用.首先,将每一个情报中的两人加入并查集,在询问时先判断一下两人是否在一个 ...
- luogu P3092 [USACO13NOV]没有找零No Change
题目描述 Farmer John is at the market to purchase supplies for his farm. He has in his pocket K coins (1 ...
- [译]在IB中实现自动布局
有关自动布局的其他文章: Autolayout Visual format language for autolayout Creating individual constraints 可怜的界面编 ...
- Mac. 文件夹赋予权限
1. click on your background to go to finder click on go and go to folder /usr right click on local a ...
- BF3 里面的z cull reverse reload
Bf3 siggraph2011的 分享 http://advances.realtimerendering.com/s2011/White,%20BarreBrisebois-%20Renderin ...
- dubbo zookeeper案例
Alibaba有好几个分布式框架,主要有:进行远程调用(类似于RMI的这种远程调用)的(dubbo.hsf),jms消息服务(napoli.notify),KV数据库(tair)等.这个框架/工具/产 ...
- 请求php文件的整个流程
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...
- UNP学习笔记(第二章:传输层)
本章的焦点是传输层,包括TCP.UDP和SCTP. 绝大多数客户/服务器网络应用使用TCP或UDP.SCTP是一个较新的协议. UDP是一个简单的.不可靠的数据报协议.而TCP是一个复杂.可靠的字节流 ...
- TCP/IP详解 卷一(第二章 链路层)
在TCP/IP协议族中,链路层主要有三个目的: 1.为IP模块发送和接收IP数据报 2.为ARP模块发送ARP请求和接收ARP应答 3.为RARP请求和接收RARP应答 TCP/IP支持多种不同的链路 ...