python笔记dict篇
来源:互联网 发布:如何安装php开发环境 编辑:程序博客网 时间:2024/05/17 09:10
Dictionary(后文称Dict)如其词义所描述的字典一样,它是一个用于储存键-值对的数据结构。对于C++程序员而言并不陌生,相当于C++中的std::map。在这篇文章中,我们将说明Dict的常用操作。
一创建一个dict
假设我们需要存储一个用户信息,它包含了以下几个信息:
1) 一个字符串类型的用户ID:uId
2) 根据用户密码计算的MD5串:password
3) 一个用户昵称: nickName
4) 用户的性别,用数字0和1分表表示男性和女性:sex
5) 用户的权限ID,用数字0~3表示从高到低的4个权限等级:privelgeLevel
现在我们可以通过一个Dict来存放这些用户信息:
# -*- coding: UTF-8 -*-# python.exedef testDict(): dictUserX = { "uId":"201708301011", "password":"AF0852A2154C22D9932B", "nickName":"UserX", "sex":0, "privelgeLevel":3} #(1) print "user id is:",dictUserX["uId"] #(2) sex = "Female" if dictUserX["sex"] == 0: sex = "Male" print "sex:",sex #print dictUserX["1"]if __name__ == "__main__": testDict()
结果为:
user id is: 201708301011
sex: Male
#(1) dict的格式为{键1:值1,键2:值2 }。
这里采用了分行。关于分行和格式化的一个准则是:在小括号,中括号和大括号中的表达式,可以不使用”\”分行(当然使用也可,这个需要视代码风格而定)。
Dict的值可以为任意一种类型,包括对象、list和dict。但是Key的类型收到严格的限制,它必需是不可更改的类型。例如字符串常量、数字、tuple等。
#(2)和C++的map一样,Python通过KEY可以访问一个值。但不同的是在C++中如果没有这个KEY不会出错,但是Python则会提示KEY找不到的错误。
Traceback (most recent call last):
File "C:/Users/fanduoduo/PycharmProjects/InterestingPython/InterestingPython_dict_1.py", line 21, in <module>
testDict()
File "C:/Users/fanduoduo/PycharmProjects/InterestingPython/InterestingPython_dict_1.py", line 18, in testDict
print dictUserX["1"]
KeyError: '1'
二遍历dict
下面时使用 for循环遍历一个dict的键值的示例.
# -*- coding: UTF-8 -*-# python.exedef testDict(): dictUserX = { "uId":"201708301011", "password":"AF0852A2154C22D9932B", "nickName":"UserX", "sex":0, "privelgeLevel":3} print u"打印所有的键:" for k in dictUserX.keys(): print k print u"打印所有的值:" for v in dictUserX.values(): print v print u"打印所有的键值对:" for k,v in dictUserX.items(): #(1) print k,":",v print u"键值数量:" print len(dictUserX) print u"确认键'uId'是否在dict中:", "uId" in dictUserX.keys() print u"确认键'hello'是否在dict中:'","hello" in dictUserX.keys()if __name__ == "__main__": testDict()
结果为:
打印所有的键:
privelgeLevel
password
nickName
uId
sex
打印所有的值:
3
AF0852A2154C22D9932B
UserX
201708301011
0
打印所有的键值对:
privelgeLevel : 3
password : AF0852A2154C22D9932B
nickName : UserX
uId : 201708301011
sex : 0
键值数量:
5
确认键'uId'是否在dict中: True
确认键'hello'是否在dict中:' False
#(1)在示例中dict.keys()返回一个访问dict键的迭代器,dict.values()返回一个访问dict值的迭代器,dict.items()返回的是一个键-值对。
使用in操作可以确定一个键是否在dict中,以避免按键取值时发生错误。
注意dict是无顺序的,在上面的例子中我们定义的顺序是:uID、password、nickName、sex、privelgeLevel,而实际打印出来的顺序是错乱的。
严格的说我们不能对一个dict排序,但是当需要按某种顺序打印键、值或者键值对内容时可以通过使用python的方法sortd可以把dict.keys,dict.values,dict.items转换为list进行排序,如下示例:
# -*- coding: UTF-8 -*-# python.exedef testDict(): dictUserX = { "uId":"201708301011", "password":"AF0852A2154C22D9932B", "nickName":"UserX", "sex":0, "privelgeLevel":3} print u"打印dictUserX:" print dictUserX print u"增加一个字段RealName:" dictUserX["RealName"] = "Jonh" print dictUserX print u"修改RealName:" dictUserX["RealName"] = "John" print dictUserX print u"移除RealName:" del dictUserX["RealName"] print dictUserX print u"清空dictUserX:" dictUserX.clear() print dictUserXif __name__ == "__main__": testDict()
结果为:
原始内容:
{'privelgeLevel': 3, 'password': 'AF0852A2154C22D9932B', 'nickName': 'UserX', 'uId': '201708301011', 'sex': 0}
使用sorted默认排序:
[('nickName', 'UserX'), ('password', 'AF0852A2154C22D9932B'), ('privelgeLevel', 3), ('sex', 0), ('uId', '201708301011')]
nickName : UserX
password : AF0852A2154C22D9932B
privelgeLevel : 3
sex : 0
uId : 201708301011
使用dict.items.sort,反向排序:
[('uId', '201708301011'), ('sex', 0), ('privelgeLevel', 3), ('password', 'AF0852A2154C22D9932B'), ('nickName', 'UserX')]
uId : 201708301011
sex : 0
privelgeLevel : 3
password : AF0852A2154C22D9932B
nickName : UserX
三更新、增加、删除dict中的元素
使用dict[key]=value增加和更新一个dict的键值,使用del方法删除一个dict中的键值对,使用clear方法清空一个dict。
# -*- coding: UTF-8 -*-# python.exedef testDict(): dictUserX = { "uId":"201708301011", "password":"AF0852A2154C22D9932B", "nickName":"UserX", "sex":0, "privelgeLevel":3} print u"原始内容:" print dictUserX print u"使用sorted默认排序:" dictUserX1 = sorted(dictUserX.items()) print dictUserX1 for k,v in dictUserX1: print k ,":",v print u"使用dict.items.sort,反向排序:" listUserX2Items = dictUserX.items() listUserX2Items.sort(reverse=True) print listUserX2Items for k,v in listUserX2Items: print k ,":",vif __name__ == "__main__": testDict()
结果为:
打印dictUserX:
{'privelgeLevel': 3, 'password': 'AF0852A2154C22D9932B', 'nickName': 'UserX', 'uId': '201708301011', 'sex': 0}
增加一个字段RealName:
{'uId': '201708301011', 'sex': 0, 'privelgeLevel': 3, 'password': 'AF0852A2154C22D9932B', 'nickName': 'UserX', 'RealName': 'Jonh'}
修改RealName:
{'uId': '201708301011', 'sex': 0, 'privelgeLevel': 3, 'password': 'AF0852A2154C22D9932B', 'nickName': 'UserX', 'RealName': 'John'}
移除RealName:
{'uId': '201708301011', 'sex': 0, 'privelgeLevel': 3, 'password': 'AF0852A2154C22D9932B', 'nickName': 'UserX'}
清空dictUserX:
{}
- python笔记dict篇
- Python笔记--dict
- python笔记-list and dict
- Python 学习笔记【dict的操作方法】
- python之dict学习笔记一
- python之dict学习笔记之二
- Python 学习笔记【dict的操作方法】
- Python学习笔记之dict、set
- Python学习笔记 - dict和set
- Python学习笔记 - 8.字典(Dict)
- Python 基础学习笔记4 Dict
- Python笔记--String、list、dict排序
- python学习笔记 使用dict和set
- Python开发学习笔记(7) - dict, set
- python学习笔记3--dict和set
- python学习笔记(四)字典(dict)
- Python dict字典 基础知识篇
- python基础篇--Dict(字典)
- java volatile关键字解析
- 【太虚AR_v0.1】使用教程 | SLAM(Markerless)
- zookeeper+dubbo和spring的整合
- JDAddressSelector京东 Android 客户端样式的级联地址选择器的使用
- 求先递增在递减数组中的最大值
- python笔记dict篇
- Android Fragment的增加,删除,添加
- 一个服务器上运行多个tomcat,显示总启动某一个特定tomcat
- 第十课记录 MapReduce编程模型与案例
- XZ_JavaScript之JavaScript的两大内置对象
- 处理器管理-进程的状态
- php页面静态化实现思路
- java多线程(3)之join与countDownLatch
- 如何保证Redis中的数据都是热点数据