python元组和字典的内建函数实例详解


Posted in Python onOctober 22, 2019

本文实例讲述了python元祖和字典的内建函数。分享给大家供大家参考,具体如下:

元组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的详细介绍,请参考:https://3water.com/article/172490.htm

类型转换

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程序设计有所帮助。

Python 相关文章推荐
Hadoop中的Python框架的使用指南
Apr 22 Python
深入讲解Java编程中类的生命周期
Feb 05 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
Jul 02 Python
Python中的错误和异常处理简单操作示例【try-except用法】
Jul 25 Python
Python网络编程 Python套接字编程
Sep 13 Python
python基础之包的导入和__init__.py的介绍
Jan 08 Python
Python实现爬取马云的微博功能示例
Feb 16 Python
在tensorflow中实现屏蔽输出的log信息
Feb 04 Python
基于python实现MQTT发布订阅过程原理解析
Jul 27 Python
Python模块常用四种安装方式
Oct 20 Python
python中entry用法讲解
Dec 04 Python
python性能测试工具locust的使用
Dec 28 Python
Python List列表对象内置方法实例详解
Oct 22 #Python
Python序列对象与String类型内置方法详解
Oct 22 #Python
Python基本语法之运算符功能与用法详解
Oct 22 #Python
基于Python实现拆分和合并GIF动态图
Oct 22 #Python
python  logging日志打印过程解析
Oct 22 #Python
安装2019Pycharm最新版本的教程详解
Oct 22 #Python
Python列表list常用内建函数实例小结
Oct 22 #Python
You might like
php桌面中心(三) 修改数据库
2007/03/11 PHP
简单PHP上传图片、删除图片实现代码
2010/05/12 PHP
学习从实践开始之jQuery插件开发 菜单插件开发
2012/05/03 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
2013/04/26 Javascript
js原型继承的两种方法对比介绍
2014/03/30 Javascript
js数组方法扩展实现数组统计函数
2014/04/09 Javascript
JQuery下拉框应用示例介绍
2014/04/23 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
Nodejs中session的简单使用及通过session实现身份验证的方法
2016/02/04 NodeJs
JavaScript与JQUERY获取元素的宽、高和位置
2017/02/26 Javascript
vue + socket.io实现一个简易聊天室示例代码
2017/03/06 Javascript
vue-router传递参数的几种方式实例详解
2018/11/13 Javascript
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
2019/01/07 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
2019/06/20 Javascript
js中实现继承的五种方法
2021/01/25 Javascript
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
python服务器端收发请求的实现代码
2014/09/29 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
2020/02/06 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
为什么称python为胶水语言
2020/06/16 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
详解CSS3:overflow属性
2020/11/17 HTML / CSS
基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能
2019/07/09 HTML / CSS
优衣库英国官网:UNIQLO英国
2016/12/25 全球购物
周生生珠宝香港官网:Chow Sang Sang(香港及海外配送)
2019/09/05 全球购物
描述内存分配方式以及它们的区别
2016/10/15 面试题
什么是.net的Remoting技术
2016/07/08 面试题
考察现实表现材料
2014/05/19 职场文书
学校就业推荐信范文
2014/05/19 职场文书
党员干部反四风民主生活会对照检查材料思想汇报
2014/10/12 职场文书
幼儿园教师节活动总结
2015/03/23 职场文书
2015年小学中秋节活动总结
2015/03/23 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL
Nginx HTTP跳转至HTTPS
2022/05/15 Servers