本来说好四号更新的内容被拖到现在。言归正传,今天来介绍一下字典。
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)(key的唯一性、key与value的一对多的映射)。key和value用冒号" : "分割,每对键值之间用逗号“ , ”分割,整个字典包括在花括号{}中 ,格式如下所示:
dic={key1:value1, key2:value2...}
先写一个字典
info={ 'stu1001' : "xiaoming" , 'stu1002' : "xiaohong" , }
这就是一个字典,前面的‘stu1001’称作key或者是键。后面的“xiaoming”是这个key的值。
我们可以直接打印字典print(info)。这个命令打印出来的字典是无序的,它是以key来做区分的。
如果我们知道了某个值得key 。那我们就可以通过key来调出这个值 print(info["stu1001"]) 这个命令运行出来就会得到一个结果 xiaoming
我们还可以打印所有的键或者值 运用的是 print(info.keys()) 或者 print(info.values())
其实知道了一个值得key是一个分方便的事情,不仅可以随时随地的调用出来,还能直接区修改他 info[“stu1001”]=“小明” 就是这么简单。
如果我们想在原有字典中增加一组值的话,就可以这样写 info["stu1003"]=“xiaowang”
还有一个命令 setdefault,如果键不存在于字典中,将会添加键并将值设为默认值。具体用法如下
>>> a={} >>> a['key']='123' >>> print (a) {'key': '123'} >>> print ( .setdefault('key','456')) #显示a这个字典的'key'值的内容,因为字典有,所以不会去设置它 123 >>> print (a.setdefault('key1','456')) #显示a这个字典的'key1'值的内容,因为字典没有,所以设置为456了 456 >>> a {'key1': '456', 'key': '123'}
删除:可以整个删除也可以按值删除。
删除整个字典 del info[] 这样,整个字典就被删除了
删除字典中某个值 del info["stu1003"] 这样,xiaowang这个值和key就一起删除了
利用pop删除 和之前列表一样 pop命令是删除一个 info.pop("stu1001")
pop 还有一个功能就是随机删除一个 info.popitem()
还有一个有关于取值的命令 ,当他想要输出的key 的值存在 ,就输出,如果不存在,也不会报错 info.get("sut1002") 或者 info.get("sut1009") 这个可以print一下看一下结果。
字典里也可以使用in print("stu1001" in info ) 如果在,打印一个ture 如果不在,打印false
字典可以拼接 可以讲两个字典拼接起来,但是如果两个字典中有相同的key ,会用一个中的value替代另一个 举个例子 a.update (b) 如果ab中有相同的key 。就是b中的value来代替a中的,如果a中没有b中的key 就会添加key和相应的value。
字典可以转换为列表,用的是 info.items()
这里说一下字典的遍历
for i in info print (i, info[i]) for key,value in info.items() print(key,value)
这两种方法都是遍历字典的方法,一种是直接输出key和value 。第二种是将字典先转换为列表再输出。
从结果上来说两者没什么很大的区别,但是第一种的效率是高于第二种的。因为少了一个转换成列表的过程~
在字典的指令中,有一个.fromkeys(seq,[ value]))。这是用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值。
seq = ('name', 'age', 'sex') dict = dict.fromkeys(seq) print("New Dictinary : %s" % str(dict)) dict = dict.fromkeys(seq, 10) print("New Dictinary : %s" % str(dict)) 输出是 New Dictinary : {'age': None, 'name': None, 'sex': None} New Dictinary : {'age': 10, 'name': 10, 'sex': 10}
也可以直接写 dict = dict.fromkeys([name,age,sex],"10")这个也是可以的。
在这里我们要注意一点,就是如果在后面单独改了age 对应的值, name和sex的值也都会随之改变,因为在内存中它们对应的都是一个地址!