Python_元组、字典内建方法详解
目录
前言
本篇补全元组、字典两种数据结构的内置方法的使用。想知道两种数据结构的详细介绍,请参考Python_数据结构篇,传送门:http://blog.csdn.net/jmilk/article/details/48391283
软件环境
- 系统
- UbuntuKylin 14.04
- 软件
- Python 2.7.3
- IPython 4.0.0
元组Tuple
元组是序列类型一种,也是不可变类型数据结构,对元组修改后会生成一个新的元组。所以Tuple对象并没有太多的内置方法。
count() 查询一个元素在Tuple中的数量
count(…)
T.count(value) -> integer – return number of occurrences of value
返回一个value在Tuple出现的次数,即个数。
In [5]: tup = ('My','name','is','Jmilk')
In [6]: tup.count('My')
Out[6]: 1
In [7]: tup.count('my')
Out[7]: 0
index() 查询元素在Tuple中的索引号
index(…)
T.index(value, [start, [stop]]) -> integer – return first index of value.
Raises ValueError if the value is not present.
返回在指定范围中[start,[stop]],第一次出现的value的索引。
In [15]: tup.index('Jmilk',2,4)
Out[15]: 3
元组的遍历
In [16]: tup
Out[16]: ('My', 'name', 'is', 'Jmilk')
In [17]: for i in tup:
....: print i
....:
My
name
is
Jmilk
字典Dictionary
字典数据类型使用键值对的映射关系来关联数据。
创建一个字典对象
简单的创建
In [18]: dic = {'name':'Jmilk','age':23,'city':'BJ'}
fromkey()使用keys来创建字典
fromkeys(…)
dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.
v defaults to None.
通过一个keys的序列来创建字典,可以指定keys映射的value,默认为None。
In [125]: newDic = {}.fromkeys(['name','age','city'],'not found')
In [126]: newDic
Out[126]: {'age': 'not found', 'city': 'not found', 'name': 'not found'}
查询
查询字典中key映射的value
In [44]: dic['age']
Out[44]: 23
get()查询Key映射的value,当key不存在时,返回默认值
get(…)
D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.
自动添加(字典的默认值):自动添加是字典数据类型的特性,即使一个Key起初不存在于字典中,也可为Key分配一个值,以此来建立新的项。
In [6]: dic
Out[6]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk'}
In [7]: dic.get('age',24)
Out[7]: 23
In [8]: dic.get('a',24)
Out[8]: 24
若不使用get()函数去获取一个不存在的key对应的value时,会报错。
len(dictName)获取字典长度
len(…)
len(object) -> integer
Return the number of items of a sequence or mapping.
len()是Python的内建函数,可以获取序列或字典的长度,即元素的个数。
In [34]: len(dic)
Out[34]: 3
keys()列出dict的Keys列表
keys(…)
D.keys() -> list of D’s keys
In [22]: dic.keys()
Out[22]: ['city', 'age', 'name']
values()列出dict的values列表
values(…)
D.values() -> list of D’s values
In [23]: dic.values()
Out[23]: ['BJ', 23, 'Jmilk']
添加字典项
通过赋值为字典添加一个项
格式:dictName[keyN] = valueN
In [25]: dic
Out[25]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk'}
In [27]: dic['sex'] = 'man'
In [28]: dic
Out[28]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk', 'sex': 'man'}
通过setdefault()增加
setdefault(…)
D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D
当key存在时,call D.get(k,d)方法,即获取key映射的value。当key不存在时,执行D[k]=d,即为dict增加一个新的元素。
In [25]: dic
Out[25]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk'}
In [26]: dic.setdefault('age',24)
Out[26]: 23
In [27]: dic.setdefault('sex','man')
Out[27]: 'man'
In [28]: dic
Out[28]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk', 'sex': 'man'}
删除字典项
del语句,删除字典中key对应的一个项
del语句可以操作所有的迭代器对象。
In [40]: dic
Out[40]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk'}
In [41]: del dic['age']
In [42]: dic
Out[42]: {'city': 'BJ', 'name': 'Jmilk'}
popitem() 将随机一个字典键值对弹出(删除并返回)
popitem(…)
D.popitem() -> (k, v), remove and return some (key, value) pair as a
2-tuple; but raise KeyError if D is empty.
以tuple(k,v)的形式删除字典的一个元素,并返回。需要一个接受返回的对象。若字典为空,则报错。
In [32]: dic
Out[32]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk', 'sex': 'man'}
In [34]: dic.popitem()
Out[34]: ('city', 'BJ')
In [35]: dic.popitem()
Out[35]: ('age', 23)
pop()弹出key映射的value
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 raised
In [39]: dic
Out[39]: {'name': 'Jmilk', 'sex': 'man'}
In [40]: dic.pop('name')
Out[40]: 'Jmilk'
一般情况下,当字典为空时调用了D.pop()方法的化会触发一个KeyError。但是也可以通过下面的调用方式来添加key不存在时的返回默认值。
当Key不存在时,返回默认值,避免报错:
In [20]: dic
Out[20]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk'}
In [21]: dic.pop('sex','man')
Out[21]: 'man'
clear()清空字典中的所有项
clear(…)
D.clear() -> None. Remove all items from D.
清空所有项目,返回None。
In [58]: dic
Out[58]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk'}
In [59]: dic.clear()
In [60]: dic
Out[60]: {}
修改
简单的修改dict中key映射的value值
格式:“`dictName[key] = newValue
In [50]: dic['city'] = 'GZ'
In [51]: dic
Out[51]: {'age': 23, 'city': 'GZ', 'name': 'Jmilk'}
update()更新字典
update(…)
D.update([E, ]**F) -> None. Update D from dict/iterable E and F.
If E present and has a .keys() method, does: for k in E: D[k] = E[k]
If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v
In either case, this is followed by: for k in F: D[k] = F[k]
使用另一个字典来更新一个字典,通过匹配的key来更新value。
In [137]: dic
Out[137]: {'age': 23, 'city': 'BJ', 'name': ['jmilk']}
In [138]: newInfo = {'name':'chocolate','age':22,'city':'ZH'}
In [139]: dic.update(newInfo)
In [140]: dic
Out[140]: {'age': 22, 'city': 'ZH', 'name': 'chocolate'}
当然,也可以只更新其中若干个value。
字典的复制
copy()浅复制
字典的浅复制与List的浅复制类似,都只是对引用对象的copy。
In [107]: dic1 = dic.copy()
In [108]: dic,dic1
Out[108]:
({'age': 23, 'city': 'BJ', 'name': ['jmilk', 'chocolate']},
{'age': 23, 'city': 'BJ', 'name': ['jmilk', 'chocolate']})
In [109]: dic1['age'] = 24
In [110]: dic,dic1
Out[110]:
({'age': 23, 'city': 'BJ', 'name': ['jmilk', 'chocolate']},
{'age': 24, 'city': 'BJ', 'name': ['jmilk', 'chocolate']})
注意:对浅copy得到的新字典中的value做替换操作(替换整个value),是不会影响到元字典的。但是如果对新字典中的value做了修改操作(修改其中一部分),就会影响到原字典。如下:
In [111]: dic1['name'].remove('chocolate')
In [112]: dic,dic1
Out[112]:
({'age': 23, 'city': 'BJ', 'name': ['jmilk']},
{'age': 24, 'city': 'BJ', 'name': ['jmilk']})
因为两个key的id指向同一个数据对象,对数据对象做了修改(改变数据对象)后就会都受到影响。但替换(改变引用对象)整个value,即将新字典中key的id指向另一个数据对象,不会改变原数据对象。
深copy和浅copy的详细介绍,请参考:http://blog.csdn.net/jmilk/article/details/49560989
类型转换
item() 将每个字典项,转化为Tuple和List的混合数据类型
items(…)
D.items() -> list of D’s (key, value) pairs, as 2-tuples
In [42]: dic
Out[42]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk'}
In [43]: dic.items()
Out[43]: [('city', 'BJ'), ('age', 23), ('name', 'Jmilk')]
In [44]: [x for param in dic for x in dic] #嵌套列表降维
Out[44]: ['city', 'age', 'name', 'city', 'age', 'name', 'city', 'age', 'name']
因为返回的是List类型对象,所以可以使用索引操作符。
In [46]: dic.items()[0]
Out[46]: ('city', 'BJ')
In [48]: dic.items()[0][0]
Out[48]: 'city'
由此可以看出,可以对一个对象做 操作,主要由对象的类型来决定。
成员关系
判断一个kay是否存在dict中
In [56]: dic
Out[56]: {'age': 23, 'city': 'GZ', 'name': 'Jmilk'}
In [57]: dic.has_key('age')
Out[57]: True
True ⇒ key存在dict中
False ⇒ key不存在dict中
使用成员关系运算符判断
成员资格:'age' in dic只能通过key的成员关系来判断。
In [45]: dic
Out[45]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk'}
In [46]: 'age' in dic
Out[46]: True
In [47]: 'age' not in dic
Out[47]: False
字典的遍历
In [62]: dic
Out[62]: {'age': 23, 'city': 'GZ', 'name': 'Jmilk'}
In [63]: for key_num,val_num in dic.items():
....: print key_num,val_num
....:
city GZ
age 23
name Jmilk
格式化输出value
通过格式化%(key)format来输出映射的value
In [53]: dic
Out[53]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk'}
In [54]: print 'ple call me %(name)s,Thx!' % dic
ple call me Jmilk,Thx!
In [55]: print 'I m %(age)d years old.' % dic
I m 23 years old.
只要key in dict,就能使用任意的转换说明符。
最后
到本篇为止,序列类型的常用内置方法就介绍完了。往后就是一起学习Python类和文件操作等一些内容了 :)
Jmilk
Python_元组、字典内建方法详解的更多相关文章
- Python_序列对象内置方法详解_String
目录 目录 前言 软件环境 序列类型 序列的操作方法 索引调用 切片运算符 扩展切片运算符 序列元素的反转 连接操作符 重复运算符 成员关系符 序列内置方法 len 获取序列对象的长度 zip 混合两 ...
- Python基本语法_集合set/frozenset_内建方法详解
目录 目录 前言 软件环境 可变集合Set set函数创建集合 创建空集合 集合元素的唯一性 集合推导式 set类型对象的内置方法 add增加一个元素 remove删除一个元素 pop随机删除并返回一 ...
- Python内置方法详解
1. 字符串内置方法详解 为何要有字符串?相对于元组.列表等,对于唯一类型的定义,字符串具有最简单的形式. 字符串往往以变量接收,变量名. 可以查看所有的字符串的内置方法,如: 1> count ...
- for循环与内置方法详解
''' for循环与内置方法详解 ''' # 循环:重复(按照某种规律的)做一件事情 # lt = [1, 2, 3, 4] # # ind = 0 # # while True: # print(l ...
- 序列内置方法详解(string/list/tuple)
一.常用方法集合 1.1.string,字符串常用方法 以下举例是python2.7测试: 函数名称 作用 举例 str.capitalize() 字符串第一个字符如果是字母,则把字母替换为大写字母. ...
- python的dict()字典数据类型的方法详解以及案例使用
一.之前的回顾 # int 数字 # str 字符串 # list 列表 # tuple 元组 # dict 字典 字典中最重要的方法 keys() values() items() get upd ...
- 数字内置方法详解(int/long/float/complex)
一.常用方法 1.1.int 以下是Python2.7的int内置函数: 序号 函数名 作用 举例 1 int.bit_length() 二进制存储这个整数至少需要多少bit(位). >> ...
- Python_List对象内置方法详解
目录 目录 前言 软件环境 列表List 修改列表的元素 插入列表元素 extend 将序列中的元素迭代的附加到list中 insert 在指定的索引号中插入一个元素 删除列表元素 del 删除Lis ...
- python内置常用内置方法详解
# print(locals()) # print(globals()) def func(): x = 1 y = 1 print(locals()) # 函数内部的变量 print(globals ...
随机推荐
- 解决xshell小键盘输入时串码(干货!!)
点击文件——属性 点击终端,修改为Linux即可
- mybaites 入门到精通
这个mybatis教程也不错:http://limingnihao.iteye.com/blog/781671 MyBatis 目录(?)[-] mybatis实战教程mybatis in actio ...
- 多线程-生产者消费者(synchronized同步)
正解博客:https://blog.csdn.net/u011863767/article/details/59731447 永远在循环(loop)里调用 wait 和 notify,不是在 If 语 ...
- Mysql数据同步Elasticsearch方案总结
Mysql数据同步Elasticsearch方案总结 https://my.oschina.net/u/4000872/blog/2252620
- maven生成jar包编码问题
要做一个jar文件供外部调用,此jar的源代码中注释为中文,用maven打包后在其它工程中导入后总不能正常显示中文,记录解决方法如下: 在pom.xml中设置默认编码类型为UTF-8: <pro ...
- Phaserjs怎样用ES6开发游戏
想用ES6语法开发phaserjs游戏,是phaserCE,但是不知道怎么导入,总是报错,后来经过多次尝试,解决方法如下: 干脆不导入,直接暴露到window里,然后模块化的代码全部在window.o ...
- git的安装教程
团队开发的时候常要用到git来对代码进行管理,平时开发的时候也需要使用git来做一些事情,如给vue项目进行代码编译等等. 那下面我们开始 一.安装和配置环境 首先下载git安装包(去官网下载,htt ...
- wx小程序知识点(六)
六.生命周期 (1)onLoad —— 加载时触发,只调用一次,可用来发送请求绑定数据.获取url中参数 (2)onShow —— 页面显示时触发,每次显示都会执行,用来获取需要频繁更新的数 ...
- js new Date() 测试
var t = new Date().toString(); //t = "Thu Oct 31 2019 11:36:57 GMT+0800 (中国标准时间)" var t1 = ...
- BZOJ 3991: [SDOI2015]寻宝游戏 树链的并+set
Description 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择一个村庄,瞬间转移到这个村庄,然后可 ...